1.初識Maven

Maven項目的核心是pom.xml。POM(Project Object Model,項目對象模型)定義了項目的基本信息,用于描述項目如何構(gòu)建,聲明項目依賴等等。

1.初識

<groupId>com.strivelearn</groupId>
<artifactId>hello-world</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
  • 1.groupId

????groupId定義了項目屬于哪個組,這個組往往和項目所在的組織或公司存在關(guān)聯(lián)。

  • 2.artifactId

????定義了Maven項目在組中唯一的ID。(格式:產(chǎn)品線名-模塊名)。

  • 3.version

????指的項目當(dāng)前的版本(1.0-SNAPSHOT)SNAPSHOT指的是快照,說明該項目還處于開發(fā)中,是不穩(wěn)定的版本。版本命名方式:主版本號.次版本號.修訂號。(起始版本號:1.0.0)

  • 主版本號:產(chǎn)品方向改變,或者大規(guī)模API不兼容,或者架構(gòu)不兼容升級。
  • 次版本號:保持相對兼容性,增加主要功能特性,影響范圍極小的API不兼容修改。
  • 修訂號:保持完全兼容,修復(fù)BUG,新增次要功能特性。

2.編寫主代碼

????如果實際項目開發(fā)中,需要使用到1.8的jdk,那么再使用maven進行作為項目管理的時候,一定要在pom文件里面加上compile的插件。如下:

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

????寫好代碼后,使用Maven進行編譯,在項目根目錄下運行命令:

mvn clean compile

  • clean:告訴Maven清理輸出目錄target/

  • compile:告訴Maven編譯項目主代碼,輸出到target/classes目錄

但是除了clean,compile,還有resources的操作。如果resources文件下有資源文件的話,會以utf-8的編碼方式把資源拷貝到classes文件下。

3.編寫測試代碼

????Maven項目中默認的測試代碼目錄在src/test/java。在使用idea生成項目的時候,會自動生成,并且會自動引入測試依賴的jar包(JUnit)

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

????在上面依賴的代碼里面有個值為test的元素scope,scope為依賴范圍,其值為test代表該依賴只對測試有效。如果不聲明的話,默認值為compile。代表該依賴對主代碼和測試代碼都有效。

????在JUnit中,所有執(zhí)行測試的方法都是以test開頭。需要執(zhí)行的測試方法都應(yīng)該以@Test進行標注。測試用例編寫完畢之后調(diào)用Maven命令:

mvn clean test

????執(zhí)行命令之后會在target/test-classes下生成二進制文件。并且會顯示測試多少,通過了多少,失敗了多少

4.打包和運行

????pom文件中如果沒有指定打包類型,使用默認的打包類型jar。執(zhí)行以下命令:

mvn clean package

????Maven會在打包之前執(zhí)行編譯、測試等操作。

????這時候,雖然我們可以復(fù)制這個jar文件到其他項目的Classpath中從而使用。但是如果讓其他Maven項目直接引用這個jar呢。還需要安裝步驟,執(zhí)行命令

mvn clean install

????安裝完成后,我們就可以在maven本地倉庫中,看到我們項目的pom和jar

????默認打包生成jar是不能夠直接運行的,因為帶有main方法的類信息不會加載添加到manifest中。(打開jar文件中的META-INF/MANIFEST.MF文件,將無法看到Main-Class一行)

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: strivelearn
Created-By: Apache Maven 3.5.2
Build-Jdk: 1.8.0_151

加入maven-shade-plugin插件。通過設(shè)置 MainClass 創(chuàng)建一個可執(zhí)行 Jar 包。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.strivelearn.App</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

????最終在MANIFEST.MF里有了Main-Class

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: strivelearn
Created-By: Apache Maven 3.5.2
Build-Jdk: 1.8.0_151
Main-Class: com.strivelearn.App

這時候,可以cd到j(luò)ar的根目錄執(zhí)行
java -jar hello-world.jar。那么就可以得到想要的結(jié)果了。

5.使用Archetype生成Maven項目

????Maven項目的約定是根目錄放置pom.xml文件。在src/main/java目錄中放置項目的主代碼,在src/test/java中放置項目的測試代碼。

????當(dāng)我們用maven archetype來創(chuàng)建項目骨架的時候,這些默認的約定直接給我們搭載好了。

mvn archetype:generate

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容