天天看點

maven一波流(3)——使用eclipse建構第一個maven工程

但是maven項目則不同,實際上項目目錄下是沒有jar包的。maven工程對項目的結構是有特殊要求的,比如至少得有一個配置檔案,告訴工程需要引用那些 jar包。這些jar包會自動從中央倉庫下載下傳到本地倉庫,并參與項目的建構。

本文通過一個具體的執行個體了解maven項目結構與傳統項目的不同,也了解下maven項目建構方式與傳統方式的不同。

建立maven項目

1、File-New-Other-Maven-Maven Project-Next

2、在New Maven Project界面直接Next

3、在Select An Archetype界面,Archetype的意思是原型,所謂原型可以了解為模版,就是有一些結構不用咱們一個個去寫,系統自動生成。此處我們選個簡單的maven-archetype-quickstart,這個原型會幫我們生成maven工程基本結構,然後Next。

4、輸入工程的資訊:

Group Id:com.panda

Artifact Id:mvndemo

Version:0.0.1-SNAPSHOT

Package:com.panda.mvndemo

1

2

3

4

注意Package是輸入Group Id和Artifact Id後自動生成的,可以了解Artifact Id是項目名,Group Id是組織機構名,此處組織機構就是個人panda了。

5、點選Finish,注意eclipse右下角有進度條,然後項目中的目錄檔案一直在增加,這是maven幫我們根據原型自動建構項目的過程。

項目目錄結構分析

根據maven-archetype-quickstart模型自動生成的項目目錄結構如下:

mvndemo:項目

src/main/java:業務代碼

src/test/java:測試代碼

JRE System Library:JRE庫,此處引用了JDK1.8

Maven Dependencies:Maven依賴庫,此處引入了由pom.xml指定的junit-3.8.1.jar

junit-3.8.1.jar

src:可以從檔案結構看到業務代碼和測試代碼,一般不用打開看。

target:暫時不用

pom.xml:定義maven配置資訊

都很好了解,唯一需要正視的就是pom.xml,它定義了maven項目的依賴jar包情況,具體分析下:

<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.panda</groupId>

 <artifactId>mvndemo</artifactId>

 <version>0.0.1-SNAPSHOT</version>

 <packaging>jar</packaging>

 <name>mvndemo</name>

 <url>http://maven.apache.org</url>

 <properties>

   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

 </properties>

 <!-- 配置項目依賴的jar包 -->

 <dependencies>

  <!-- 一個依賴 -->

   <dependency>

     <!-- 通過groupId、artifactId、version唯一定位一個jar包,是以這是一個坐标 -->

     <!-- 該坐标指定的junit-3.8.1.jar被自動放入Maven Dependencies依賴庫中,程式建構時可以使用該jar -->

     <groupId>junit</groupId>

     <artifactId>junit</artifactId>

     <version>3.8.1</version>

     <scope>test</scope>

   </dependency>

 </dependencies>

</project>

maven項目的建構

正常項目導入jar包,編輯完代碼,可以進行測試和打包安裝了。maven項目需要通過maven來執行這個過程,主要包括:清理、測試、打包。

清理

右鍵點選項目名稱-Run as-Maven clean,執行清理操作,控制台輸出關鍵資訊如下:

[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ mvndemo ---

[INFO] Deleting D:WorkspaceEclipsePhotonmvndemo arget

[INFO] Total time: 0.199 s

[INFO] Finished at: 2018-09-07T16:39:35+08:00

可以看出幾點:

eclipse菜單Maven clean點選後實際上應該是調用maven完成的maven-clean清理操作

清理操作應該是删除target目錄下生成的一些東西

在0.199s内完成了清理操作

總結來說,maven項目需要先清理下,否則可能因為之前生成的東西影響新的生成。

測試

右鍵點選項目名稱-Run as-Maven test,執行測試操作,控制台輸出關鍵資訊如下:

Running com.panda.mvndemo.AppTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec

可以看出幾點:(如果對單元測試不熟悉的,建議去稍微了解下)

執行了AppTest測試類,該類因為繼承了TestCase,而TestCase實作了junit架構下的Test接口實作了單元測試功能

可以推測出,當執行Maven test測試操作時,maven會自動調用src/test/java下面的測試類的測試方法。因為我們已經在pom.xml配置了junit,是以此處能識别并調用junit單元測試方法。

測試方法代碼如下,因為assertTrue( true );肯定斷言成功,是以最後測試結果是run:1個,沒有失敗和錯誤。

public void testApp()

   {

       assertTrue( true );

   }

打包安裝

右鍵點選項目名稱-Run as-Maven install,執行安裝操作,控制台輸出關鍵資訊如下:

[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ mvndemo ---

[INFO] Building jar: D:WorkspaceEclipsePhotonmvndemo argetmvndemo-0.0.1-SNAPSHOT.jar

可以看出,在target目錄下生成了一個mvndemo-0.0.1-SNAPSHOT.jar。

運作程式

我們使用指令執行mvndemo-0.0.1-SNAPSHOT.jar

首先在D:WorkspaceEclipsePhotonmvndemo arget目錄建立mvndemo.bat腳本,用于在windows平台調用java運作生成的 mvndemo-0.0.1-SNAPSHOT.jar。

mvndemo.bat腳本檔案内容如下:

java -jar mvndemo-0.0.1-SNAPSHOT.jar

pause

運作後如下,可見需要配置程式的入口。

D:WorkspaceEclipsePhotonmvndemo arget>java -jar mvndemo-0.0.1-SNAPSHOT.jar

mvndemo-0.0.1-SNAPSHOT.jar中沒有主清單屬性

可想而知maven程式的入口必然是在pom.xml中配置,我們在pom.xml中為project根節點增加一個build節點如下:

<build>

 <plugins>

  <plugin>

   <groupId>org.apache.maven.plugins</groupId>

   <artifactId>maven-shade-plugin</artifactId>

   <version>1.2.1</version>

   <executions>

    <execution>

     <phase>package</phase>

     <goals>

      <goal>shade</goal>

     </goals>

     <configuration>

      <transformers>

       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">

        <!-- 此處指定入口類 -->

        <mainClass>com.panda.mvndemo.App</mainClass>

       </transformer>

      </transformers>

     </configuration>

    </execution>

   </executions>

  </plugin>

 </plugins>

</build>

是以此時就會調用入口類:com.panda.mvndemo.App,這個是自動生成的,代碼如下:

public class App

{

   public static void main( String[] args ) throws InterruptedException

       System.out.println( "Hello World!" );

}

OK,重新清理、生成,調用mvndemo.bat後:

Hello World!

OK ,大功告成,厲害炸了。

總結與補充

使用maven後,實際上對整個項目的管理,不論是代碼結構目錄,還是編譯生成運作方式,實際上都變了。

但是都是很合理按照需求發生的變化,我們熟悉一下,也就順理成章的用就行了。

另補充下,其實不用eclipse,直接執行mvn指令也能完成整個項目的建構、生成,就像java程式也可以直接用java指令行生成一樣。有興趣的可以去了解下,有助于加深對maven的了解,當然不去看也OK,反正我也沒看。

繼續閱讀