Maven項目--繼承、聚合、座標、倉庫、生命週期

查找依賴信息的網站:http://mvnrepository.com/

一、座標

# Maven中的座標,使用三個向量在倉庫中唯一定位一個Maven工程
# 公司或組織域名倒序+項目名
<groupId>com.myonetest.maven</groupId>
# 模塊名稱
<artifactId>JavaProject01</artifactId>
# 版本,SNAPSHOT 快照的意思,代表會快速迭代;RELEASE 代表穩定版本
<version>0.0.1-SNAPSHOT</version>
# 依賴範圍,compile 代表全程參與;test 只參與測試;provided 不參與打包
<scope>compile</scope>

# Maven工程和倉庫路徑的對應關係
<groupid>org.springframework</groupid>
<artifactid>spring-core</actifactid>
<version>4.0.0.RELEASE</version>
# org/springframework/spring-code/4.0.0.RELEASE/spring-code-4.0.0.RELEASE.jar

二、倉庫

# Maven倉庫分爲本地倉庫和遠程倉庫

# 本地倉庫一般包含以下內容
# 1、Maven自身需要的插件
# 2、第三方框架或工具所需要的jar包
# 3、我們自己開發的Maven工程

# 遠程倉庫一般分爲
# 1、中央倉庫
# 2、中央倉庫鏡像
# 3、局域網倉庫(可以使用 Nexus 搭建)

三、生命週期/插件

# 插件
# 生命週期的各個階段只定義了需要執行的任務,各個階段的任務和插件的目標是相對應的,相似的目標是由
#特定的插件來完成的
# Maven的核心程序定義了抽象的生命週期,生命週期的各個階段任務都由插件來完成。
# 我們可以把插件目標定義爲 Maven 命令。


# 生命週期
# Maven核心程序爲了更好的實現自動化構建,不論現在要執行生命週期中的哪一個極端,都會從這個生命週期的最初位置開始執行。(也就是每次都會從頭重新開始,比如執行 compile 命令後,再執行 test 命令,因爲 test 命令在 compile 命令之後,Maven核心程序會從頭開始再執行一遍直到 test)

# mvn clean 生命週期
Clean Lifecycle # 在進行真正的構建前進行清理工作
    pre-clean #執行一些需要在clean之前完成的工作
    clean #移除所有上一次構建生成的文件
    post-clean #執行一些需要在clean之後立刻完成的工作

# mvn site 生命週期
Site Lifecycle #生成項目報告、站點,發佈站點
    pre-site #執行一些需要在生成站點文檔之前完成的工作
    site #生成項目的站點文檔
    post-site #執行一些需要在生成站點文檔之後完成的工作,並且爲部署做準備
    site-deploy #將生成的站點文檔部署到特定的服務器上
# 這裏經出用到的是site階段和site-deploy階段,用以生成和發佈Maven站點,這是Maven強大的功能,
文檔及統計數據自動生成,很好看。

# 默認的生命週期
Default Lifecycle:構建的核心部分,編譯、測試、打包、安裝,部署等
Default生命週期是Mave生命週期最重要的一個,絕大部分工作都發生在這個裏面
    validate
    generate-source
    process-sources
    generate-resources
    process-resource #複製並處理資源文件,至目標目錄,準備打包
    compile #編譯項目的源代碼
    process-classes
    generate-test-sources
    process-test-sources
    generate-test-resources
    process-test-reources #複製並處理資源文件,至目標測試目錄。
    test-compile #編譯測試源代碼
    prcess-test-classes
    test #使用合適的單元測試框架運行測試,這些測試代碼不會被打包或部署
    prepare-package
    package #接受編譯好的代碼,打包成可發佈的格式,比如jar
    pre-integration-test
    integration-test
    post-integration-test
    verify
    install #將包安裝至本地倉庫,以讓其它項目依賴
    deploy #將最終的包複製到遠程的倉庫,以讓其它開發人員與項目共享或部署到服務器上運行。

# 三個之間相互獨立,可以單獨調用,也可以運行mvn clean install site 一起調用。

PS:Maven核心程序只定義了抽象的生命週期,但具體的工作由插件完成,而插件並不包含在Maven核心程序中。 當Maven程序執行命令需要用到一些插件時,Maven核心程序會先到本地倉庫找,如果找不到則自動連接外網到中央倉庫下載。如果下載失敗則構建失敗。

四、繼承

# 假設場景
# 現在由三個項目A\B\C,都有依賴包junit,版本分別是4.0/4.9/4.2
# 因爲並不是必須包,所以依賴範圍是 test 
<scope>test</scope>
# 但是 test 的依賴範圍不能傳遞,所以A\B\C三個項目中的版本都不一樣

# 需求
# 統一管理各個模塊之間的junit依賴版本

# 解決思路
# 將所有的junit依賴版本統一提取到父工程中,子工程聲明依賴時不指定版本;以父工程中統一設定。

# 操作步驟
# 1、創建一個新的Maven工程作爲父工程,創建項目時 packaging 要選擇 pom 方式。
    # POM.xml 如下
    <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.parent.maven</groupId>
      <artifactId>parent</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>pom</packaging>
    </project>
# 2、在子工程中對聲明對父工程的引用
    <!-- 子工程中聲明父工程 -->
    <parent>
  	    <groupId>com.parent.maven</groupId>
  	    <artifactId>parent</artifactId>
  	    <version>0.0.1-SNAPSHOT</version>
  	    <relativePath>../parent/pom.xml</relativePath>
    </parent>
# 3、將子工程的座標中與父工程座標中重複的內容刪除,會有黃線提示:grouid is duplicate of parent groupid
# 4、在父工程中統一聲明JUNIT的依賴(還有一個重點是方便管理)
    <dependencyManagement>
  	    <dependencies>
  		    <dependency>
  			    <groupId>junit</groupId>
  			    <artifactId>junit</artifactId>
  			    <version>4.0</version>
  			    <scope>test</scope>
  		    </dependency>
  	    </dependencies>
    </dependencyManagement>
# 5、在子工程中刪除junit依賴的版本號,如果要使用不一致的,也可以不刪除。

# PS: 配置繼承後,執行安裝命令時要先安裝父工程。

五、聚合

# 可以實現一鍵安裝各個模塊
# 配置方式: 在一個總的聚合工程中配置各個參與聚合的模塊
# PS: 可以新建一個Maven工程作爲聚合工程,也可以使用剛纔實現繼承時創建的父工程(一般使用這個)

    <!-- 配置聚合 -->
    <modules>
        <!-- 指定各個子工程的相對路徑 -->
  	    <module>../ProjectA</module>
  	    <module>../ProjectB</module>
  	    <module>../ProjectC</module>
    </modules>

# 配置完成直接pom.xml右擊run 允許install即可
# 日誌中的 reactor build order 會顯示先後順序
# 日誌中的 Reactor Summary 會顯示各個模塊的耗時和成功狀態

六、自動部署

平常好像用不上,就先不記錄了,核心是使用 cargo 一家專門從事servlet容器啓動的組織,org.codehaus.cargo

 

發佈了83 篇原創文章 · 獲贊 16 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章