Maven項目對象模型(POM),能夠經過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具。html
Maven是一個項目管理工具,它包含了一個項目對象模型 (Project Object Model),一組標準集合,一個項目生命週期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命週期階段(phase)中插件(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明肯定義的項目對象模型來描述你的項目,而後Maven能夠應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)插件。java
這兩段來自百度的描述,其實說來仍是很準確的!!node
因此,整體來講,pom是整個maven的核心,或者說,是使用者,也就是咱們的核心關注點!
***git
能夠說如今稍微大一點的公司,稍微有點追求的公司,都在使用這個了吧,固然我也是工做以後才知道的...程序員
剛工做那會兒,只是先學會用它而已,具體是怎麼個回事並非很清楚,出現問題了,可能只知道查下衝突啊,clean一下再package一下啊,install歷來不用,都是直接deploy的。究其本質,都是不懂maven所致。
***github
如上所述,maven是用來管理項目的,by描述語言,經過項目的依賴,構建來進行管理。引用下官網的描述:web
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.數據庫
挑重點:基於POM,管理項目的build、報告和文檔。apache
因此,學習maven,核心是瞭解pom文件,而後搞清楚是如何管理項目的。npm
關於pom文件,首先要明白,這是個xml文件:
可擴展標記語言,標準通用標記語言的子集,是一種用於標記電子文件使其具備結構性的標記語言。
也就是說,xml重點在於傳遞數據,而在於
它被設計用來傳輸和存儲數據,其焦點是數據的內容。
超文本標記語言被設計用來顯示數據,其焦點是數據的外觀。
因此他傳遞的信息,在這裏就是項目的依賴,或者說項目的結構。pom文件描述了整個項目的依賴結構。
下面是一個最簡單的pom文件的代碼
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.andy.maven</groupId> <artifactId>maven-test-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>maven_test_biz</module> <module>untitled</module> </modules> <name>maven-test-server</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
具體每塊是什麼,以下圖所示
因此,對於maven來講,一切都要從如何描述項目結構出發,分析pom中的每個元素。
包,能夠說是pom中最基本的元素了,無論是項目所依賴的各類包,仍是包之間的關係,仍是其餘什麼,都是以包爲對象的。
包,實際上是一個版本,也能夠說是是一個項目,因此pom所描述的項目也都是一個包:
<groupId>com.andy.maven</groupId> <artifactId>maven-test-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging>
這個東西,就是一個包的座標!!無論包是在那個倉庫,都是根據這個座標去加載進來的。須要強調的是,這四個值都是必須的,只不過最後一個默認狀況下是jar包。
那麼,有了包,包從哪裏來咧?就是倉庫。
對於maven自己來講,有一箇中心倉庫,講道理全部的包都在上面的,可是這裏有兩個須要特別注意的地方:
第二個好理解,第一個的話,不要嫌麻煩,具體給出緣由以下引用:
九個使用私庫的緣由
(譯自:Nine Reasons to Use a Repository Manager: Sonatype Nexus )
目前有不少組織使用了一些工具依賴於Maven倉庫,但他們並無採用一個倉庫管理器,對於這一點我十分驚訝。可能沒人提出來這一點,沒人站出來告訴別人使用一個倉庫管理器能帶來什麼好處。我常常能從不少不使用Maven倉庫管理器的組織那裏聽到這樣的字眼:「咱們不須要那麼複雜……」,或者「中央倉庫夠了,咱們不須要在本地創建這樣一個倉庫」
不用說,關於什麼「是」一個好的Maven倉庫,還存在不少誤解。首先,安裝它一點都不復雜。你只須要花幾分鐘就能下載並安裝好Nexus ,並且咱們已經特地的使得這一過程變得容易,而且儘量減小侵入性。第二,一個緩存遠程倉庫的倉庫管理器並不會緩存全部的東西。一個好的倉庫管理器只會按需的緩存內容。這裏是爲那些排斥倉庫管理器的人提供的九條理由。
九 - 加速構建
當你在Maven中運行多模塊項目構建的時候,你認爲Maven是怎麼知道它是否須要更新插件或者snapshot依賴的呢?它須要爲全部須要檢驗的構件向服務器提出一個請求。即便沒什麼變化,若是你的項目依賴於一些SNAPSHO或者你沒有指定插件版本,Maven就必須對遠程倉庫提交數十至數百的請求。全部這些經過公共Internet的請求加起來會浪費不少時間。我看到過一個複雜的構建,在安裝了本地Nexus以後,節省了75%的時間。不要再浪費編碼時間去無畏的等待Maven對遠程倉庫的請求了。
八 - 節省你本身的帶寬
組織越大,節省帶寬就越重要。若是你有數千開發者不停的浪費帶寬在下載一樣的文件,那麼使用一個倉庫管理器能夠保存一個本地的緩存,從而節省大量的帶寬。即便一些小型的組織,對於網絡鏈接和IT運行的預算也有限,也必須處理不少開發人員浪費帶寬不停重複下載一樣文件的問題。
七 - 節省中央Maven倉庫的帶寬
這能夠說是一種公德心,利己利人。運行一箇中央Maven倉庫不容易。基於全球軟件構件的須要,服務數百萬的請求,數T的數據,一點都不便宜。簡單的事情如每一個組織安裝一個本地倉庫管理器能夠大量下降對中央倉庫的帶寬需求(至少一半)。若是你有大於兩個開發者在使用Maven,那麼請爲了中央倉庫義務的安裝一個倉庫管理器。
六 - 可預見性和穩定性
過去一些年,你多久會遇到一次因爲斷網引發的業務完全中斷?讓天天的工做依賴於中央倉庫意味着你正依賴於因特網鏈接(事實上中央倉庫是24/7可用的)。雖然咱們有信心保持中央倉庫24/7運行,但你仍是應該花一點時間創建你本身的倉庫,以確保你的開發團隊不會因爲任意一方的網絡中斷而驚訝。若是你有本地的倉庫管理器,如Nexus,你能夠確保即便你失去了網絡鏈接你還能工做。
五 - 控制和審計
固然,你已經轉移到了Maven(或者Ivy,Ivy讀取一樣的倉庫),並且你有一房間的開發人員,他們被受權添加或者刪除依賴,以及試驗新的框架。咱們都清楚。開發人員可能都對試驗新框架更感興趣,而不是正常工做。但不幸的是,不少時間,一個架構師,或者一個架構小組須要創建組織使用的基線標準。Nexus提供這一層次的控制。
若是你須要對那些組織中使用的構件進行更多的監管,看一下Nexus。沒有倉庫管理器,對於那些你開發團隊會使用的依賴你只有不多的控制。
四 - 可以部署第三方構件
你但願可以基於開源數據庫工做,如MySQL或者Postgres,可是你組織有不一樣的需求,和Oracle有一個長期的支持合同。所以,你有一系列JAR文件不可以從公共Maven倉庫得到。你須要將這些構件部署到倉庫中,而後配置Maven去讀取該倉庫。
你不用爲此手工編寫一些POM,只要下載Nexus,而後花兩三分鐘時間使用這個免費,功能強大的工具來建立一個倉庫,部署第三方構件。Nexus提供了直觀的上傳界面,你可使用它上傳任意JAR文件,而後在你項目依賴中引用它。
三 - 能夠創建本地內部倉庫
很是好,你正使用Maven,每一個人都從頭開始根據代碼執行快速的構建。整個一年,這都工做得很好,可是當系統變得龐雜,程序員開始抱怨構建花了太多時間。你能夠經過分割項目解決這個問題,而後使用Nexus做爲一個內部倉庫來存儲內部的依賴。
例如,有一個公司有30個開發者,被分紅三個10人的小組,每一個小組關注於系統的不一樣部分。若是不可以很方便的實現內部依賴共享,相似的小組就不得不建立一個基於文件系統的倉庫,或者將系統整個的構建,那樣依賴就能被安裝到每一個開發者的本地倉庫。
另外一種選擇是將項目分隔成不一樣的模塊,每一個模塊都依賴於存儲在Nexus倉庫中的構件。這麼作以後,小組之間能夠經過基於Nexus交換已編譯的snapshot和release構件來協做。換句話說,你不須要讓沒個開發者簽出巨大的包含整個組織代碼的多模塊項目。組織中的每一個小組能夠發佈snapshot構件至本地Nexus,從而每一個小組能夠維護一個只包含它負責代碼的項目結構。
在宏觀層次,公共Maven倉庫及創建項目定義的嚴格制度,能夠充當開源世界中跨項目協做的基礎。(這聽起來是否是很重要,很「使人敬畏」?)
二 - 能夠創建公共倉庫
若是是一個開源項目,或者你將軟件發佈到公共環境,Nexus能夠是一個你用來爲外部用戶提供構件服務的工具。這麼想……上你發佈項目的一個版本是何時?假設它沒被髮布到Maven倉庫中,你極可能須要編寫一些腳原本打包這次發佈的內容,可能某些特定的人須要使用一個超級權限的密鑰來爲該發佈簽名。而後,你必須將其上傳到一些web服務器上,而後確保相應的頁面被更新,正確描述了這次發佈。這裏有不少沒必要要的複雜度。
若是你正使用Nexus,它能夠被配置成一個暴露在公共世界的宿主倉庫,你就可使用Maven的打包和裝配能力,以及Maven倉庫的結構,來使得一次發佈變得很是的簡單。並且,這不只僅正對於JAR文件和Java web應用;Maven倉庫能夠存儲任何種類的構件(事實上,我正考慮使用Maven倉庫結構來發布用戶文檔和視頻內容)。Nexus,及Maven倉庫,總得來講爲發佈定義了你們都知道的結構。若是你正編寫一些Java類庫,將其發佈到你本身的Nexus實例中,而後提供公共倉庫服務,就可讓人們更容易的立刻開始使用的的代碼。
一 - 這至關簡單
相似的事情我常常聽到。有一個早晨的Scrum會議,或者項目狀態的週會。一些低層的程序員怯懦的舉起他的手說,「咱們能夠安裝一個如Nexus的倉庫軟件麼?我認爲它能幫助咱們顯著的加速不少工做。」一直被時間的預算壓着的開發經理,聽到單詞「安裝」和「軟件」,就立刻否決了這件事情,理由是他們沒有時間作這種基礎工做,由於這不是「需求驅動」的。(我看到過這種事情發生。)
這個經理不知道的是,在一個共享的機器上安裝Nexus,而後配置隨後的系統服務多是須要花不到十分鐘的時間。事實上,你能夠在免費的Maven書上讀到安裝說明。安裝Nexus十分的簡單。我已經有了一些實踐,可是我認爲任何一個知道如何操做web瀏覽器的人均可以在幾分鐘內完成這項工做。
使用私庫的教程
一、 爲何使用Nexus
若是沒有私服,咱們所需的全部構件都須要經過maven的中央倉庫和第三方的Maven倉庫下載到本地,而一個團隊中的全部人都重複的從maven倉庫下載構件無疑加大了倉庫的負載和浪費了外網帶寬,若是網速慢的話,還會影響項目的進程。不少狀況下項目的開發都是在內網進行的,鏈接不到maven倉庫怎麼辦呢?開發的公共構件怎麼讓其它項目使用?這個時候咱們不得不爲本身的團隊搭建屬於本身的maven私服,這樣既節省了網絡帶寬也會加速項目搭建的進程,固然前提條件就是你的私服中擁有項目所需的全部構件。二、Nexus下載
下載地址:http://www.sonatype.org/nexus/go三、Nexus啓動
我下載的是zip包,解壓後進入\nexus-2.1.2-bundle\nexus-2.1.2\bin\jsw,根據操做系統類型選擇文件夾,我選的是windows-x86-32文件夾,進入後可看到以下所示bat文件。圖(1)
雙擊console-nexus.bat運行。遊覽器中輸入http://127.0.0.1:8081/nexus/,出現圖(2)所示就表明nexus已經啓動成功。圖(2)
8081爲默認的端口號,要修改端口號可進入nexus-2.1.2-bundle\nexus-2.1.2\conf\打開nexus.properties文件,修改application-port屬性值就能夠了。
默認的用戶名和密碼:admin/admin123,登陸後看到圖(3)所示:圖(3)
四、Nexus倉庫
nexus的倉庫類型分爲如下四種:
group: 倉庫組
hosted:宿主
proxy:代理
virtual:虛擬
首次登錄nexus後能夠看到如下一個倉庫組和多個倉庫。圖(4)
Public Repositories: 倉庫組
3rd party: 沒法從公共倉庫得到的第三方發佈版本的構件倉庫
Apache Snapshots: 用了代理ApacheMaven倉庫快照版本的構件倉庫
Central: 用來代理maven中央倉庫中發佈版本構件的倉庫
Central M1 shadow: 用於提供中央倉庫中M1格式的發佈版本的構件鏡像倉庫
Codehaus Snapshots: 用來代理CodehausMaven 倉庫的快照版本構件的倉庫
Releases: 用來部署管理內部的發佈版本構件的宿主類型倉庫
Snapshots:用來部署管理內部的快照版本構件的宿主類型倉庫五、配置nexus
5.一、開啓遠程索引
新搭建的neuxs環境只是一個空的倉庫,須要手動和遠程中心庫進行同步,nexus默認是關閉遠程索引下載,最重要的一件事情就是開啓遠程索引下載。登錄nexus系統,默認用戶名密碼爲admin/admin123。
點擊左邊Administration菜單下面的Repositories,找到右邊倉庫列表中的三個倉庫Apache Snapshots,Codehaus Snapshots和Maven Central,而後再沒有倉庫的configuration下把Download Remote Indexes修改成true。以下圖而後在Apache Snapshots,Codehaus Snapshots和Maven Central這三個倉庫上分別右鍵,選擇Repari Index,這樣Nexus就會去下載遠程的索引文件。
這樣設置之後, Nexus會自動從遠程中央倉庫下載索引文件, 爲了檢驗索引文件自動下載是否生效,能夠卻換到Browse Index
在左邊菜單欄裏面有個Artifact Search, 在輸入框裏面輸入你想要搜索的構件名字,好比:maven, 那麼查詢結果以下:
5.2創建宿主倉庫
新 建公司的內部倉庫,步驟爲Repositories –> Add –> Hosted Repository,在頁面的下半部分輸入框中填入Repository ID和Repository Name便可,好比分別填入
zfy 和 zfy repostiory,另外把Deployment Policy設置爲Allow Redeploy,點擊save就建立完成了。
這裏我點擊添加宿主類型的倉庫,在倉庫列表的下方會出現新增倉庫的配置,以下所示:圖(6)
點擊save按鈕後就會在倉庫列表中看到剛纔新增的倉庫。5.三、建立Nexus倉庫組
Nexus 中倉庫組的概念是Maven沒有的,在Maven看來,無論你是hosted也好,proxy也好,或者group也好,對我都是同樣的,我只管根據 groupId,artifactId,version等信息向你要構件。爲了方便Maven的配置,Nexus可以將多個倉庫,hosted或者 proxy合併成一個group,這樣,Maven只須要依賴於一個group,便能使用全部該group包含的倉庫的內容。
neuxs- 1.9.2.3中默認自帶了一個名爲「Public Repositories」組,點擊該組能夠對他保護的倉庫進行調整,把剛纔創建的公司內部倉庫zfy repostiory加入其中,這樣就不須要再在maven中明確指定內部倉庫 的地址了。同時建立一個Group ID爲public-snapshots、Group Name爲Public Snapshots Repositories的組,把Apache Snapshots、Codehaus Snapshots、Snapshots和zfy repostiory加入其中。到這裏neuxs的安裝配置就完成了,下面介紹如何在maven中使用本身的私服。
5.四、建立Nexus代理倉庫
點擊菜單欄上的Add按鈕後選擇Proxy Repository,看到以下所示配置界面:圖(7)
以上本人分別建立 了 hosted和group ,沒有建立proxy,經maven測試經過。六、 settings.xml的配置
[html] view plaincopyprint?
nexus-releases
admin
admin123
nexus-snapshots
admin
admin123
nexus-releases
http://localhost:8081/nexus/content/groups/public
nexus-snapshots
http://localhost:8081/nexus/content/groups/public-snapshots
nexus
nexus-releases
http://nexus-releases
true
true
nexus-snapshots
http://nexus-snapshots
true
true
nexus-releases
http://nexus-releases
true
true
nexus-snapshots
http://nexus-snapshots
true
true
nexus
[html] view plaincopyprint?[html] view plaincopyprint?
七、 maven 項目 的pom.xml配置
[html] view plaincopyprint?[html] view plaincopyprint?
nexus-releases
Nexus Release Repository
http://localhost:8081/nexus/content/repositories/releases
nexus-snapshots
Nexus Snapshot Repository
http://localhost:8081/nexus/content/repositories/snapshots
八、mvn:deploy命令上傳包,會發現下載路徑必不是中央庫的路徑,而是nexus裏面的倉庫組路徑。這個說明配置環境成功。
另外,關於倉庫,還有兩點須要說明下:
有了包,以及包的來源,如何組織這些包,maven使用了標籤
固然,上述描述是最簡單的一種狀況,由儉入奢,咱們談到兩種狀況:
配置,使得maven可使得同一個項目在不一樣環境中,能夠動態配置參數、插件,依賴的包,以及依賴的包的屬性值等等。
<profile> <id>dev</id> <properties> <maven.test.skip.exec>false</maven.test.skip.exec> <jsf.alias>_dev</jsf.alias> <iUserTagService.alias>tag-interface</iUserTagService.alias> </properties> <build> <resources> <resource> <directory>${profiles.dir}/dev</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <id>prepare-node-npm</id> <phase>validate</phase> <goals> <goal>run</goal> </goals> <configuration> <target> <copy todir="${basedir}/target/app"> <fileset dir="${basedir}/app"> <exclude name="**/node_modules"/> </fileset> <fileset file="${basedir}/fis-conf.js"> </fileset> <fileset file="${basedir}/package.json"> </fileset> </copy> <unzip src="target/app/node_modules.zip" dest="target"/> <unzip src="target/app/node.zip" dest="target"/> <copy file="target/node_modules/fis3/bin/fis.js" tofile="target/fis3"/> <copy file="target/app/package.json" tofile="target/package.json"/> <copy file="target/app/fis-conf.js" tofile="target/fis-conf.js"/> <chmod dir="target/fis3" perm="ugo+x"/> <chmod dir="target/node/node" perm="ugo+x"/> </target> </configuration> </execution> </executions> </plugin> <plugin> <groupId>com.github.eirslett</groupId> <artifactId>frontend-maven-plugin</artifactId> <version>1.0</version> <configuration> <workingDirectory>target</workingDirectory> <installDirectory>target</installDirectory> <environmentVariables> <APPDATA>${basedir}/target/APPDATA</APPDATA> </environmentVariables> </configuration> <executions> <execution> <id>npm run build</id> <goals> <goal>npm</goal> </goals> <configuration> <arguments>run dev-copy</arguments> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.2</version> <configuration> <webResources> <resource> <directory>target/output/src/main/webapp/</directory> </resource> <resource> <directory>src/main/webapp/WEB-INF</directory> <targetPath>WEB-INF</targetPath> </resource> </webResources> </configuration> </plugin> </plugins> </build> </profile>
另外,如此方便的功能,若是都是上述這樣子的代碼,必定不是程序員們所期待的,因此,ide中各類maven的插件就帶來了方便的profile的管理,在此再也不贅述。
前面說過,項目自己就會是一個包,有時候/經常,會把多個項目共同開發,而後每一個項目依賴的東西其實都差很少,因而誕生了模塊的概念,對應就有了項目關係。
項目關係中最重要的就是多模塊和繼承了。
多模塊好理解,繼承其實和對象的繼承是同樣樣的,只不過繼承的是對包的依賴關係,其餘相似,好比須要在總的pom文件中聲明module,好比須要子模塊表示本身的爸爸是哪一個相似這樣。
因爲依賴具備傳遞性,好比a依賴了b,b依賴了c,那麼a就依賴了c,因此引用包的過程當中,很容易出現預見不到的依賴衝突問題。
做爲菜鳥程序員,通常而言,我都是打日誌看下,而後把舊版本的直接exclusion掉,搞定之,百試不爽...
命令以下
mvn -Pdev clean package -Dmaven.test.skip=true dependency:tree -Dverbose > tree.log mvn dependency:tree -Dverbose > tree.log
就不獻醜了,直接引用一篇寫的很詳細明瞭的
博客
這裏主要是在eclipse中使用maven,所以只使用到了一部分命令,整理下來方便之後查閱。
生成清除Eclipse項目結構:
mvn eclipse:eclipse
mvn eclipse:clean清理(刪除target目錄下編譯內容)
mvn clean僅打包Web頁面文件
mvn war:exploded編譯項目
mvn compile打包發佈
mvn package打包時跳過測試
mvn package -Dmaven.test.skip=ture還有不少命令目前尚未使用到,之後遇到再補充
本文地址:http://blog.csdn.net/kongxx/article/details/6993501
Maven用了好久了,命令一直記不住,其實想一想就那個幾個經常使用的,今天寫下來,幫着記憶吧
建立一個簡單的Java工程:mvn archetype:create -DgroupId=com.mycompany.example -DartifactId=Example
創 建一個java的web工程:mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.mycompany.app -DartifactId=my-webapp
打包:mvn package
編譯:mvn compile
編譯測試程序:mvn test-compile
清空:mvn clean
運行測試:mvn test
生成站點目錄: mvn site
生成站點目錄併發布:mvn site-deploy
安裝當前工程的輸出文件到本地倉庫: mvn install
安 裝指定文件到本地倉庫:mvn install:install-file -DgroupId=-DartifactId= -Dversion=1.0.0 -Dpackaging=jar -Dfile=<myfile.jar>
查看實際pom信息: mvn help:effective-pom
分析項目的依賴信息:mvn dependency:analyze 或 mvn dependency:tree
跳過測試運行maven任務: mvn -Dmaven.test.skip=true XXX
生成eclipse項目文件: mvn eclipse:eclipse
查看幫助信息:mvn help:help 或 mvn help:help -Ddetail=true
查看插件的幫助信息:mvn:help,好比:mvn dependency:help 或 mvn ant:help 等等。
經常使用命令
- 建立Maven的普通java項目:
mvn archetype:create
-DgroupId=packageName
-DartifactId=projectName
- 建立Maven的Web項目:
mvn archetype:create
-DgroupId=packageName
-DartifactId=webappName
-DarchetypeArtifactId=maven-archetype-webapp
- 編譯源代碼: mvn compile
- 編譯測試代碼:mvn test-compile
- 運行測試:mvn test
- 產生site:mvn site
- 打包:mvn package
- 在本地Repository中安裝jar:mvn install
- 清除產生的項目:mvn clean
- 生成eclipse項目:mvn eclipse:eclipse
- 生成idea項目:mvn idea:idea
- 組合使用goal命令,如只打包不測試:mvn -Dtest package
- 編譯測試的內容:mvn test-compile
- 只打jar包: mvn jar:jar
- 只測試而不編譯,也不測試編譯:mvn test -skipping compile -skipping test-compile
( -skipping 的靈活運用,固然也能夠用於其餘組合命令)
- 清除eclipse的一些系統設置:mvn eclipse:clean
懶懶懶,再加上自己不怎麼使用命令,暫且記下吧。
***
彷佛從maven出發,上下游沒什麼東西,可能主要是應用場景還不夠豐富吧,姑且等待有問題出現的時候及時總結吧
***
maven能夠說是很大程度的解放了程序員在項目構建方面的問題,但提供簡便的背後必定是複雜邏輯處理的掩蓋,由此,maven能夠說是外表清純,心裏複雜。
對於咱們而言,仍是好用就行,保持對maven問題重視便可。