maven的學習(17.4.25)

私募基金募集過程:
特定對象調查
投資者適當性匹配
基金推介
基金風險提示
合格投資者確認
基金簽署及打款
投資冷靜期
回訪確認

認購確認成功

maven入門核心概念
POM (Project Object Model)
一個項目所有的配置都放置在 POM 文件中:定義項目的類型、名字,管理依賴關係,定製插件的行爲等等。
在 POM 中,groupId, artifactId, packaging, version 叫作 maven 座標,它能唯一的確定一個項目。有了 maven 座標,
我們就可以用它來指定我們的項目所依賴的其他項目,插件,或者父項目。一般 maven 座標寫成如下的格式:
groupId:artifactId:packaging:version
像我們的例子就會寫成:
com.mycompany.helloworld: helloworld: jar: 1.0-SNAPSHOT
大項目一般會分成幾個子項目。在這種情況下,每個子項目就會有自己的 POM 文件,然後它們會有一個共同的父項目。

這樣只要構建父項目就能夠構建所有的子項目了,因爲子項目的 POM 會繼承父項目的 POM。

Maven插件
我們可以用了 mvn archetype:generate 命令來生成一個項目。那麼這裏的 archetype:generate 是什麼意思呢?
archetype 是一個插件的名字,generate是目標(goal)的名字。這個命令的意思是告訴 maven 執行 archetype 插件的 generate 目標。
插件目標通常會寫成 pluginId:goalId。
一個目標是一個工作單元,而插件則是一個或者多個目標的集合。
比如說Jar插件,Compiler插件,Surefire插件等。從看名字就能知道,Jar 插件包含建立Jar文件的目標, 
Compiler 插件包含編譯源代碼和單元測試代碼的目標。Surefire 插件的話,則是運行單元測試。
同理,mvn 本身不會做太多的事情,它不知道怎麼樣編譯或者怎麼樣打包。
它把構建的任務交給插件去做。插件定義了常用的構建邏輯,能夠被重複利用。

這樣做的好處是,一旦插件有了更新,那麼所有的 maven 用戶都能得到更新。


Maven 生命週期
在上一篇文章中,我們用的第二個命令是:mvn package。這裏的 package 是一個maven的生命週期階段 (lifecycle phase )。
生命週期指項目的構建過程,它包含了一系列的有序的階段 (phase),而一個階段就是構建過程中的一個步驟。
那麼生命週期階段和上面說的插件目標之間是什麼關係呢?插件目標可以綁定到生命週期階段上。
一個生命週期階段可以綁定多個插件目標。當 maven 在構建過程中逐步的通過每個階段時,會執行該階段所有的插件目標。
maven 能支持不同的生命週期,但是最常用的是默認的Maven生命週期 (default Maven lifecycle )。
如果你沒有對它進行任何的插件配置或者定製的話,那麼上面的命令 mvn package 會依次執行默認生命週期中直到包括 package 階段前的所有階段的插件目標:
process-resources 階段:resources:resources
compile 階段:compiler:compile
process-classes 階段:(默認無目標)
process-test-resources 階段:resources:testResources
test-compile 階段:compiler:testCompile
test 階段:surefire:test
prepare-package 階段:(默認無目標)

package 階段:jar:jar


Maven 依賴管理
之前我們說過,maven 座標能夠確定一個項目。換句話說,我們可以用它來解決依賴關係。
在 POM 中,依賴關係是在 dependencies 部分中定義的。在上面的 POM 例子中,我們用 dependencies 定義了對於 junit 的依賴:
Xml 代碼
  <dependencies> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
    </dependency> 
  </dependencies> 
那這個例子很簡單,但是實際開發中我們會有複雜得多的依賴關係,因爲被依賴的 jar 文件會有自己的依賴關係。
那麼我們是不是需要把那些間接依賴的 jar 文件也都定義在POM中呢?答案是不需要,因爲 maven 提供了傳遞依賴的特性。
所謂傳遞依賴是指 maven 會檢查被依賴的 jar 文件,把它的依賴關係納入最終解決的依賴關係鏈中。
針對上面的 junit 依賴關係,如果你看一下 maven 的本地庫(我們馬上會解釋 maven 庫)
你會發現 maven 不但下載了 junit-3.8.1.jar,還下載了它的 POM 文件。這樣 maven 就能檢查 junit 的依賴關係,把它所需要的依賴也包括進來。
在 POM 的 dependencies 部分中,scope 決定了依賴關係的適用範圍。
我們的例子中 junit 的 scope 是 test,那麼它只會在執行 compiler:testCompile and surefire:test 目標的時候纔會被加到 classpath 中,
在執行 compiler:compile 目標時是拿不到 junit 的。
我們還可以指定 scope 爲 provided,意思是 JDK 或者容器會提供所需的jar文件。
比如說在做web應用開發的時候,我們在編譯的時候需要 servlet API jar 文件,但是在打包的時候不需要把這個 jar 文件打在 WAR 中,
因爲servlet容器或者應用服務器會提供的。

scope 的默認值是 compile,即任何時候都會被包含在 classpath 中,在打包的時候也會被包括進去。


Maven 庫
當第一次運行 maven 命令的時候,你需要 Internet 連接,因爲它要從網上下載一些文件。
那麼它從哪裏下載呢?它是從 maven 默認的遠程庫(http://repo1.maven.org/maven2) 下載的。這個遠程庫有 maven 的核心插件和可供下載的 jar 文件。
但是不是所有的 jar 文件都是可以從默認的遠程庫下載的,比如說我們自己開發的項目。
這個時候,有兩個選擇:要麼在公司內部設置定製庫,要麼手動下載和安裝所需的jar文件到本地庫。
本地庫是指 maven 下載了插件或者 jar 文件後存放在本地機器上的拷貝。在 Linux 上,它的位置在 ~/.m2/repository,
在 Windows XP 上,在 C:\Documents and Settings\username\.m2\repository ,
在 Windows 7 上,在 C:\Users\username\.m2\repository。當 maven 查找需要的 jar 文件時,它會先在本地庫中尋找,只有在找不到的情況下,纔會去遠程庫中找。
運行下面的命令能把我們的 helloworld 項目安裝到本地庫:
      $mvn install
一旦一個項目被安裝到了本地庫後,你別的項目就可以通過 maven 座標和這個項目建立依賴關係。
比如如果我現在有一個新項目需要用到 helloworld,那麼在運行了上面的 mvn install 命令後,我就可以如下所示來建立依賴關係:
Xml 代碼
<dependency>
  <groupId>com.mycompany.helloworld</groupId>
  <artifactId>helloworld</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency> 

好了,maven 的核心概念就簡單的介紹到這裏。


Maven實戰
(1)Maven是什麼:是一個項目管理工具。
包含一個項目對象模型(POM)、一組標準集合、一個項目生命週期、一個依賴管理系統、用來運行定義在生命週期階段中插件目標的邏輯。
(2)Maven的目錄結構
bin:maven命令(Windows環境命令和Linux環境命令)
boot:maven類加載器
cong:對外提供接口的配置文件 修改setting配置文件將對當前下的所有用戶都生效,可以將其移動到.m2文件下表示只對當前的用戶生效。

lib:依賴的一些jar包


創建第一個maven項目
mvn archetype:create -DgroupId=com.maven.test -DartifactId=test1 -DpackageName=com.maven.test.test1
創建生成src和pom.xml(核心配置)文件。src(main和test,main(運行時的類和配置文件包括java和resource),test(測試用的類

和配置文件包括java和resource))


運行項目
mvn install(應在pom所在的文件下),第一次install在.m2文件下自動生成repository倉庫並會將當前項目按照groupId、artifactId

和版本號的格式生成一個jar包放在了repository下,在創建其他工程時需要依賴此jar包時將按照這個組織結構找到這個jar包。


常用命令
mvn test  執行測試命令
mvn compile 執行main目錄下的資源和類進行編譯
mvn test compile 
mvn test -compile 只對測試目錄下的類和資源進行編譯
mvn clear 將項目目錄下的target文件清除

mvn package 項目目錄下打包但並不會上次到repository上


maven的生命週期(maven將按照生命週期的順序進行執行任務過程)

如process-resource、compile、process-classes、process-test-resource、test-compile、test、、、


maven的依賴管理
添加新的依賴:首先確定所依賴的jar包是否存在在repository裏,若這個jar包未在repository裏需要重新引入
如 mvn install:install-file -Dfile=D:\antlr\antlr\2.7.7jar -DgroupId=antlr -DartifactId=antlr -Dversion=2.7.7 -Dpackaging=jar

編輯pom.xml的dependency


將項目導入到eclipse裏

mvn eclipse:eclipse  轉成一個eclipse工程(會生成一個classpath和project的文件,當修改pom文件時需要重新生成這兩個文件)並導入eclipse中


倉庫轉移

若要移動repository文件夾時,我們通過修改當前用戶下的setting文件的localrepository中的path路徑


常用maven倉庫
http://mvnrepository.com/











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章