《Maven權威指南》學習筆記(三)

《Maven權威指南》學習筆記(三)

  1. 構建生命週期
    1. Maven使用POM描述項目,將其建模成一些名詞.在Maven中這些“動詞”是由Maven插件包裝的一些目標,它們綁定到一個構建生命週期的階段中.當你讓Maven構建一個項目的時候,你其實是讓它一步步通過那些預定義的有序的階段,並且運行所有註冊到某個特定階段的目標
    2. Maven中有三種標準的生命週期:清理(clean),默認(default)(有時候也稱爲構建),和站點(site)
      1. 清理生命週期 (clean):它包含了三個生命週期階段pre-clean,clean,post-clean
        1. 簡單的運行clean:clean目標不會完整的執行該生命週期,但是指定clean階段就能使用clean生命週期,並且逐個的經過生命週期階段,直到到達clean階段(可能未到post-clean階段就停了)
        2. 指定post-clean階段能經過完整的clean生命週期,直到post-clean階段.
        3. 直接運行pre-clean階段會提示:[INFO] No goals needed for project – skipping.可以在它的構建配置中,綁定了某個目標至pre-clean階段
        4. 可以自定義Clean插件的行爲去刪除構建輸出目錄以外的文件
      2. 默認生命週期 (default):它是一個軟件應用程序構建過程的總體模型。第一個階段是validate,最後一個階段是deploy
      3. 站點生命週期 (site):它包含了四個階段:1. pre-site 2. site  3. post-site  4. site-deploy  默認綁定到站點生命週期的目標是:1. site – site:site  2. site-deploy -site:deploy
      4. 在上述這些生命週期裏,如果某個生命週期階段沒有目標綁定在其上,運行該階段會提示[INFO] No goals needed for project – skipping
    3. 打包相關生命週期
      1. 綁定到每個階段的特定目標默認根據項目的打包類型設置
      2. JAR打包默認的目標
        生命週期階段 目標
        process-resources resources:resources
        compile compiler:compile
        process-test-resources resources:testResources
        test-compile compiler:testCompile
        test surefire:test
        package jar:jar
        install install:install
        deploy deploy:deploy
    4. 通用生命週期目標
      1. Process Resources:
        1. 大部分生命週期將resources:resources目標綁定到process-resources階段.。process-resources階段處理資源並將資源複製到輸出目錄,同時也會在資源上應用過濾器,能讓你替換資源文件中的一些符號(而不是指pom.xml)
        2. 要配置使用該default.properties文件的資源過濾,我們需要在這個項目的POM中指定兩樣東西:構建配置的filters元素中的屬性文件列表,以及一個標記告訴Maven資源目錄需要過濾。默認的Maven行爲會跳過過濾,只是將資源複製到輸出目錄;你需要顯式的配置資源過濾,否則Maven就會置之不理
        3. 添加資源目錄列表<resource>      <directory>src/main/images</directory>    </resource>
        4. 也可以聲明兩個資源目錄,給它們提供不同的過濾配置和目標目錄配置
      2. Compile:
        1. 大部分生命週期將Compiler插件的compile目標綁定到compile階段
        2. 可以爲Compiler插件設置source和target版本
        3. 如果你想要存儲項目的源碼至src/java而非src/main/java,讓構建輸出至classes而非target/classes,你可以覆蓋定義在超級POM中的sourceDirectory的默認值
      3. Process Test Resources:  調用resources:testResources
      4. Test Compile:調用compile:testCompile編譯測試源代碼目錄至測試構建構建輸出目錄
      5. Test:大部分生命週期綁定Surefire插件的test目標至test階段
        1. maven.test.skip變量同時控制Compiler和Surefire插件,如果你傳入maven.test.skip,就等於告訴Maven整個的跳過測試
      6. Install:Install插件的install目標基本上都是綁定到install生命週期階段。install:install目標只不過是將項目的主要構件安裝到本地倉庫,如果這個項目的打包類型是POM,那麼該目標就僅僅複製POM到本地倉庫
      7. Deploy:Deploy插件的deploy目標通常綁定到deploy生命週期階段。該階段用來將一個構件部署到遠程Maven倉庫,當你執行一次發佈的時候通常需要更新遠程倉庫
  2. 第11章 構建Profile 和 第12章 Maven套件 先跳過不看(profile能解決產品環境和開發環境數據庫地址不同的問題)
  3. 屬性和資源過濾
    1. 屬性
      1. 你可以在pom.xml文件或者資源文件中使用屬性,資源文件被會Maven Resource插件的過濾特性處理
      2. 隱式的屬性:project.*,settings.*env.*,Java系統屬性
      3. Maven項目的屬性:
        1. 任何在Maven POM 中的東西都可以用屬性來引用(project.groupId 和 project.version)
      4. 如果你試圖在Maven中引用輸出目錄,你絕不應該使用如target/classes的字面量,而是應該使用屬性來引用這些目錄(project.build.*)
        1. 關於Maven Model對象可用屬性的完整列表(關於model對象的屬性還不是很清楚,應該是諸如model.*)
      5. Maven的Settings屬性
      6. 環境變量屬性
      7. Java系統屬性:任何你能從System.getProperty()獲取的屬性都能以Maven屬性的形式引用,如:java.version
      8. 用戶定義的屬性:
        1. 用戶定義的屬性可以在POM中引用,也可以由Maven Resource插件用來過濾資源
    2. 資源過濾:
      1. 你可以使用Maven來對項目資源進行變量替換。在資源過濾被激活的時候,Maven會掃描資源,尋找由${ 和}包圍的Maven屬性的引用。一旦它找到這些引用,它就會使用合適的值去替換它們,就像前一節中定義的屬性可以在POM中引用一樣
      2. 該節和profile有點關聯,因爲第11章未看,理解不夠深.
  4. 第 14 章 Maven和Eclipse: m2eclipse  沒有IDE,跳過
  5. 第15章及其以後的章節都先跳過.
  6. 附錄A稍微過了一遍.附錄B沒看.

要點:

  1. Maven 不知道如何打包 WAR 文件,也不知道如何運行單元測試,Maven大部分的智能是由插件實現的,而插件從 Maven 倉庫獲得.當你下載Maven的時候,你得到的是一個包含了基本軀殼的Maven核心,它知道如何解析命令行,管理classpath,解析POM文件,在需要的時候下載Maven插件
  2. conf/ 目錄包含了一個全局的settings.xml文件,該文件用來自定義你機器上Maven的一些行爲。如果你需要自定義Maven,更通常的做法是覆寫~/.m2目錄下的settings.xml文件,每個用戶都有對應的這個目錄
  3. 當Maven運行一個目標的時候,每個目標都會訪問定義在項目POM裏的信息
  4. 在一個Java項目中,Java類放在src/main/java下面,而classpath資源文件放在src/main/resources下面
  5. Maven自帶了一個用來下載Maven核心插件和依賴的遠程倉庫地址(http://repo1.maven.org/maven2)
  6. Maven倉庫的標準是按照下面的目錄格式來存儲構件,相對於倉庫的根目錄:/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
  7. 一旦Maven已經從遠程倉庫下載了一個構件,它將永遠不需要再下載一次,因爲maven會首先在本地倉庫查找插件,然後纔是其它地方
  8. 它支持了傳遞性依賴(transitive dependencies),Maven會隱式的把這些庫間接依賴的庫也加入到你的項目中.
  9. 添加一些關於項目許可證,組織以及項目相關開發人員的一些信息.,licenses,organization 和 developers 等元素
  10. 一個插件目標也被認爲是一個 “Mojo”
  11. 開啓調試輸出允許你看到Maven 工作時的依賴機制,查看完整的依賴蹤跡: mvn install -X
PS:
  1. 學習如何瀏覽郵件列表
  2. artifact:人工製品;手工藝品;加工品
  3. archetype:原型
  4. snapshot:快照

問題:

  1. 在向create目標傳入了packageName參數,與不傳入沒什麼區別,生成的pom.xml沒有變化,最後打包的名稱也沒有不同.
  2. 一開始構建前將conf/setting.xml下的repository地址改過後,將不會生成默認的~/.m2文件夾,而且針對每個用戶的配置文件~/.m2/setting.xml也沒有生成.
發佈了171 篇原創文章 · 獲贊 4 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章