Maven相關內容收集整理-01

1. pom.xml配置文件說明

示例:java

<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">
    
    <!-- 聲明項目描述符遵循哪個POM模型版本。 -->
    <modelVersion>4.0.0</modelVersion>
    
    <!-- 項目的全球惟一標識符,一般使用全限定的包名區分該項目和其餘項目。-->
    <groupId>com.hyou</groupId>
    
    <!-- 
      構件的標識符,它和group ID一塊兒惟一標識一個構件。
      換句話說,你不能有兩個不一樣的項目擁有一樣的artifact ID和groupID。
      在某個 特定的group ID下,artifact ID也必須是惟一的。
    -->
    <artifactId>ctms-v2-util</artifactId>
    
    <!-- 項目當前版本,格式爲:主版本.次版本.增量版本-限定版本號 -->
    <version>2.0.0</version>
    
    <!-- 項目產生的構件類型,例如jar、war、ear、pom等等 -->
    <packaging>jar</packaging>
    
    <!-- 項目的名稱 -->
    <name>ctms-v2-util</name>
    
    <!-- 項目主頁的URL -->
    <url>http://maven.apache.org</url>
    
    <!-- 全局變量屬性定義。定義一些變量,在pom文件的其餘位置能夠使用 -->
    <properties>
        <!-- 
          這裏面子節點名稱能夠自定,即爲變量名。 
          節點的值即變變量值。
          使用的時候相似EL表達式的寫法: ${spring.version}, ${yourVarName}
        -->
        <spring.version>4.2.0.RELEASE</spring.version>
        <yourVarName>yourValue</yourVarName>
    </properties>
    
    <!-- 遠程倉庫發佈配置 -->
    <distributionManagement>
        <repository>
            <id>releases</id>
            <name>192.168.0.6 nexus repository</name>
            <url>http://192.168.0.6:9999/nexus/content/repositories/releases</url>
        </repository>
    </distributionManagement>
    
    <!-- 遠程倉庫代理配置 -->
    <repositories>
        <repository>
            <id>nexus-myland</id>
            <name>192.168.0.6 nexus repository</name>
            <url>http://192.168.0.6:9999/nexus/content/groups/public/</url>
        </repository>
    </repositories>
    
    <!-- 依賴配置,項目使用的各類類庫都經過該依賴配置加載 *** -->
    <dependencies>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
    </dependencies>
    
    <!-- 構建項目使用 -->
    <build>
        
        <!-- 通常配置一些插件,用於實現編譯、打包、測試等等應用場景 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <!-- 不一樣插件有不一樣的配置參數 -->
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        
    </build>
    
</project>

2. 配置補充說明

2.1. 關於版本號的管理git

  • 常見的GNU風格的版本號命名格式:github

    主版本號 . 子版本號 [. 修正版本號 [. 編譯版本號 ]]web

    示例: 4.2.5, 4.2.8.1spring

  • GNU風格的版本號管理策略:apache

    1. 項目第一版本時,版本號能夠爲 0.1 或 0.1.0, 也能夠爲 1.0 或 1.0.0
    2. 當項目在進行了局部修改或 bug 修正時,主版本號和子版本號都不變,修正版本號加 1
    3. 當項目在原有的基礎上增長了部分功能時,主版本號不變,子版本號加 1,修正版本號復位爲 0,於是能夠被忽略掉.
    4. 當項目在進行了重大修改或局部修正累積較多,而致使項目總體發生全局變化時,主版本號加 1
    5. 編譯版本號通常是編譯器在編譯過程當中自動生成的,咱們只定義其格式,並不進行人爲控制.
  • maven中的快照版本與正式版本api

    • release : 發佈庫
    • snapshot : 快照庫

2.2. 依賴配置中的scope節點屬性併發

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.2</version>
    <scope>provided</scope>
</dependency>
  • scope節點可選,用於標記該依賴的庫用於哪一個環節。
  • 可選範圍以下:
    • compile :默認的scope,表示 dependency 均可以在生命週期中使用。並且,這些dependencies 會傳遞到依賴的項目中。適用於全部階段,==會隨着項目一塊兒發佈==。
    • provided :跟compile類似,可是代表了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。這個scope 只能做用在編譯和測試時,同時==沒有傳遞性==。
    • runtime :表示dependency不做用在編譯時,但會做用在運行和測試時,如JDBC驅動,適用運行和測試階段。
    • test :表示dependency做用在測試時,不做用在運行時。 只在測試時使用,用於編譯和運行測試代碼。==不會隨項目發佈==。
    • system : 跟provided 類似,可是在系統中要之外部JAR包的形式提供,maven不會在repository查找它。

3. 基本命令(操做)

3.1. compileapp

mvn compile

    編譯源代碼,編譯後在target目錄下生成相應的class等編譯結果文件。eclipse

3.2. test

mnv test

    執行測試,基於JUnit。它會運行test代碼目錄下的全部可運行的JUnit測試代碼。

3.3. package

mvn package

    打包指令,將project打包成jar文件或war文件等。根據pom.xml中的packaging屬性配置打包成相應的文件。

    生成的包文件命名格式以下:

[artifactId]-[version].jar
例如pom.xml中對project配置:

<groupId>com.hyou</groupId>
<artifactId>ctms-framework</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>


則打包生成的文件名以下:
ctms-framework-2.0.0.jar
[artifactId].war

例如:
xbv2.war

3.4. source:jar

mvn source:jar

    源代碼打包指令,將java源文件等源代碼打成jar文件。

    生成的包文件命名格式以下:

[artifactId]-[version]-source.jar
例如pom.xml中對project配置:

<groupId>com.hyou</groupId>
<artifactId>ctms-framework</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>


ctms-framework-2.0.0-sources.jar

3.5. install

mvn install

    將當前工程的代碼打包併發布到本地倉庫。在本地倉庫生成相應的jar文件等。

    在本地倉庫中生成的jar文件命名格式與package打成的jar包命名方式相同。

4. 部分插件

4.1. 編譯相關的插件

    與 mvn compile, mvn package 等編譯相關的指令有關。

    配置示例:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

4.2. 單元測試相關的插件

    與 mvn test 單元測試指令有關。不顯式配置則會按照默認配置處理。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <skipTests>true</skipTests>
    </configuration>
</plugin>

4.3. 單元測試覆蓋率統計相關的插件

    與JUnit相結合的輔助工具,用於檢查JUnit測試用例對所測試源代碼的覆蓋率。能夠生成單元測試報告和相關的代碼覆蓋率統計。

<!-- 單元測試覆蓋率 -->
<!-- cobertura:cobertura -->
<!-- cobertura:clean -->
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>2.7</version>
</plugin>

    參考指令:

// 代碼覆蓋率統計執行
mvn cobertura:cobertura

// 清空cobertura插件運行結果
mvn cobertura:clean

4.4. 源代碼打包相關的插件

    將工程源代碼打包成jar文件

<!-- 源代碼打Jar包 -->
<!-- source:jar -->
<!-- package -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <excludes>
            <exclude>log4j.properties</exclude>
            <exclude>spring.properties</exclude>
            <exclude>applicationContext.xml</exclude>
            <exclude>conf/**</exclude>
        </excludes>
    </configuration>
</plugin>

4.5. jetty web容器運行插件

    web工程下,開發時用於啓動web容器。     這個6.1.26版本,只支持servlet2.X版本。

<!-- 啓動命令: jetty:run -->
<!-- reload參數: [manual|automatic] -->
<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <version>6.1.26</version>
    <configuration>
        <contextPath>/xbv2</contextPath>
        <webDefaultXml>${project.basedir}/src/main/webapp/WEB-INF/webdefault.xml</webDefaultXml>
        <connectors>
            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                <port>8080</port>
            </connector>
        </connectors>
        <reload>manual</reload>
        <scanIntervalSeconds>60</scanIntervalSeconds>
    </configuration>
</plugin>

    這個9.3.11.v20160721版本較高,可支持高版本servlet。不過與現有的web工程裏一些路徑的寫法有點不大兼容。

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId> 
    <version>9.3.11.v20160721</version>
    <configuration>
        <scanIntervalSecond>20</scanIntervalSecond> 
        <webApp>
            <contextPath>/xbv2</contextPath> 
        </webApp> 
        <classesDirectory>${project.basedir}/target/classes</classesDirectory> 
        <httpConnector>
            <port>8080</port> 
        </httpConnector> 
    </configuration> 
</plugin>

5. 相關資源

  1. Maven Repository : http://mvnrepository.com/
  2. Apache中央倉庫: https://repo.maven.apache.org/maven2
  3. Maven官網 : http://maven.apache.org/
  4. github
相關文章
相關標籤/搜索