在本教程中,我們将向你展示如何使用 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=NumberGenerat
or -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\NumberGenerato
r
[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_CONTAIN
ER
[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中。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iMaFjM1EDMIJDMxUTMtEzLcdjMwETNxAjMvwFbhlmcvRXd09CXzRWYvxGc19CXt92YukWYilWa55yd3d3Lc9CX6MHc0RHaiojIsJye.png)
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 {
@Test
public 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 檔案,包元素定義應該包應該輸出什麼。
<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-SNAPSH
OT.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.y
iibai.App
Unique ID : 94e5fd1a-c038-415f-a8ed-7fc58c397369
C:\worksp\NumberGenerator>
C:\worksp\NumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.y
iibai.App
Unique ID : 48df568a-4b4b-4964-b767-664e206ca4b5
C:\worksp\NumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.y
iibai.App
Unique ID : 4ac9156c-2e4a-45f4-8644-0707ae28d5a6
下載下傳代碼
下載下傳代碼 -
Maven-NumberGenerator.zip