在本教程中,我們將向你展示如何使用 Maven 來建立一個 Java 項目,匯入其到Eclipse IDE,並打包 Java 項目到一個 JAR 檔案。
所需要的工具: Maven 3.3.3 Eclipse 4.2 JDK 8 注意:請確保 Maven 是正確安裝和配置(在Windows,*nix,Mac OSX系統中),然後再開始本教程,避免 mvn 命令未找到錯誤。 1. 從 Maven 模板建立一個項目
在終端(* UNIX或Mac)或命令提示字元(Windows)中,瀏覽到要建立 Java 項目的檔案夾。鍵入以下命令:
mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
這告訴 Maven 來從 maven-archetype-quickstart 模板建立 Java 項目。如果忽視 archetypeArtifactId 選項,一個巨大的 Maven 模板列表將列出。
例如,這裡的工作目錄是:C:\worksp,執行命令過程時間可能比較久,看個人的網路狀況。
C:\worksp>mvn archetype:generate -DgroupId=com.yiibai -DartifactId=NumberGenerator -DarchetypeArtifactId=maven -archetype-quickstart -DinteractiveMode=false[INFO] Scanning for projects...[INFO][INFO] ------------------------------------------------------------------------[INFO] Building Maven Stub Project (No POM) 1[INFO] ------------------------------------------------------------------------[INFO][INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources@ standalone-pom >>>[INFO][INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources@ standalone-pom <<<[INFO][INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom ---[INFO] Generating project in Batch mode[INFO] ----------------------------------------------------------------------------[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0[INFO] ----------------------------------------------------------------------------[INFO] Parameter: basedir, Value: C:\worksp[INFO] Parameter: package, Value: com.yiibai[INFO] Parameter: groupId, Value: com.yiibai[INFO] Parameter: artifactId, Value: NumberGenerator[INFO] Parameter: packageName, Value: com.yiibai[INFO] Parameter: version, Value: 1.0-SNAPSHOT[INFO] project created from Old (1.x) Archetype in dir: C:\worksp\NumberGenerator[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 23.166 s[INFO] Finished at: 2015-10-27T11:03:48+08:00[INFO] Final Memory: 17M/114M[INFO] ------------------------------------------------------------------------
在上述情況下,一個新的Java項目命名 “NumberGenerator”, 而整個項目的目錄結構會自動建立。 注意
有少數使用者說 mvn archetype:generate 命令未能產生項目結構。 如果您有任何類似的問題,不用擔心,只需跳過此步驟,手動建立檔案夾,請參閱步驟2的項目結構。 2.Maven目錄布局
使用 mvn archetype:generate + maven-archetype-quickstart 模板, 以下項目的目錄結構被建立。
NumberGenerator |-src |---main |-----java |-------com |---------yiibai |-----------App.java |---test|-----java |-------com |---------yiibai |-----------AppTest.java |-pom.xml
很簡單的,所有的原始碼放在檔案夾 /src/main/java/, 所有的單元測試代碼放入 /src/test/java/. 注意,請閱讀 Maven標準目錄布局
附加的一個標準的 pom.xml 被產生。這個POM檔案類似於 Ant build.xml 檔案,它描述了整個項目的資訊,一切從目錄結構,項目的外掛程式,項目依賴,如何構建這個項目等,請閱讀POM官方指南 pom.xml 3. Eclipse IDE
為了使它成為一個 Eclipse 項目,在終端進入到 “NumberGenerator” 項目,鍵入以下命令:
C:\worksp\NumberGenerator>mvn eclipse:eclipse.... ...[INFO] Using Eclipse Workspace: null[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAINER[INFO] Not writing settings - defaults suffice[INFO] Wrote Eclipse project for "NumberGenerator" to C:\worksp\NumberGenerator.[INFO][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 04:47 min[INFO] Finished at: 2015-10-27T15:24:48+08:00[INFO] Final Memory: 15M/164M[INFO] ------------------------------------------------------------------------
執行以上命令後,它自動下載更新相關資源和配置資訊(需要等待一段時間),併產生 Eclipse IDE所要求的所有專案檔。要匯入項目到Eclipse IDE中,選擇 “File -> Import… -> General->Existing Projects into Workspace”
圖片: 項目匯入到 Eclipse IDE中。
4. 更新POM
預設的 pom.xml 太簡單了,很多時候,你需要添加編譯器外掛程式來告訴 Maven 使用哪個 JDK 版本是用來編譯項目。(預設JDK1.4,這的確太舊了點)
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin>
從更新JUnit 3.8.1到最新的 4.11。
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency>
Maven 座標
上面的XML程式碼片段被稱為“Maven座標”,如果你需要 JUnit 的 jar,你需要找出其相應的 Maven 座標。它適用於所有其他的依賴,如Spring,Hibernate,Apache 普通的 等,只要到Maven中心儲存庫,並找出哪些是依賴正確的 Maven 座標。 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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mkyong</groupId><artifactId>NumberGenerator</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>NumberGenerator</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies><build> <plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin> </plugins></build></project>
在終端,再次發出同樣的命令 mvn eclipse:eclipse ,Maven將從Maven中心儲存庫下載外掛程式項目依賴關係(JUnit),它會自動儲存到你的本地倉庫。 5. 更新商務邏輯
測試驅動開發(TDD),先更新單元測試,以確保應用程式(APP)對象有一個方法來產生包含恰好36位字母表的唯一密鑰。 AppTest.java
package com.yiibai;import org.junit.Assert;import org.junit.Test;public class AppTest {@Testpublic void testLengthOfTheUniqueKey() {App obj = new App();Assert.assertEquals(36, obj.generateUniqueKey().length());}}
完成商務邏輯。 App.java
package com.yiibai;import java.util.UUID;/** * Generate a unique number * */public class App { public static void main( String[] args ) { App obj = new App(); System.out.println("Unique ID : " + obj.generateUniqueKey()); } public String generateUniqueKey(){ String id = UUID.randomUUID().toString(); return id; }}
6. Maven 打包
現在,我們將使用Maven這個項目,並輸出編譯成一個 “jar” 的檔案。 請參考 pom.xml 檔案,包元素定義應該包應該輸出什麼。 pom.xml
<project ...><modelVersion>4.0.0</modelVersion><groupId>com.yiibai</groupId><artifactId>NumberGenerator</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version>
在終端輸入 mvn package :
C:\worksp\NumberGenerator> mvn package... ...ha-2/classworlds-1.1-alpha-2.jar (37 KB at 20.2 KB/sec)Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-io/2 .0.2/plexus-io-2.0.2.jar (57 KB at 28.1 KB/sec)Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-inte rpolation/1.15/plexus-interpolation-1.15.jar (60 KB at 21.4 KB/sec)Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-arch iver/2.1/plexus-archiver-2.1.jar (181 KB at 61.5 KB/sec)Downloaded: https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-util s/3.0/plexus-utils-3.0.jar (221 KB at 60.3 KB/sec)[INFO] Building jar: C:\worksp\NumberGenerator\target\NumberGenerator-1.0-SNAPSHOT.jar[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 01:00 min[INFO] Finished at: 2015-10-27T20:00:17+08:00[INFO] Final Memory: 10M/54M[INFO] ------------------------------------------------------------------------
它編譯,運行單元測試並打包項目成一個 jar 檔案,並把它放在 project/target 檔案夾。如果出錯:ERROR: Unable to locate the Javac Compiler in:, C:\Program Files (x86)\Java\jre6\..\lib\tools.jar,Please ensure you are using JDK 1.4 or above and,not a JRE (the com.sun.tools.javac.Main class is required)...
參考:http://my.oschina.net/u/1449336/blog/199802
最終項目的目錄結構, 如下圖片 :
7. 樣本
從項目的 jar 檔案運行應用程式樣本
C:\worksp\NumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.yiibai.AppUnique ID : 94e5fd1a-c038-415f-a8ed-7fc58c397369C:\worksp\NumberGenerator>C:\worksp\NumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.yiibai.AppUnique ID : 48df568a-4b4b-4964-b767-664e206ca4b5C:\worksp\NumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.yiibai.AppUnique ID : 4ac9156c-2e4a-45f4-8644-0707ae28d5a6