使用Maven創建Java項目

在本教程中,我們將向你展示如何使用 Maven 來創建一個 Java 項目,導入其到Eclipse IDE,並打包 Java 項目到一個 JAR 文件。

所需要的工具:

  1. Maven 3.3.3
  2. Eclipse 4.2
  3. 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中。

使用Maven創建Java項目

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。

junit junit 4.11 test

Maven 座標

上面的XML代碼片段被稱爲「Maven座標」,如果你需要 JUnit 的 jar,你需要找出其相應的 Maven 座標。它適用於所有其他的依賴,如Spring,Hibernate,Apache  普通的 等,只要到Maven中心儲存庫,並找出哪些是依賴正確的 Maven 座標。

pom.xml – 更新版本


4.0.0
com.mkyong
NumberGenerator
jar
1.0-SNAPSHOT
NumberGenerator
http://maven.apache.org


junit
junit
4.11
test

<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>

在終端,再次發出同樣的命令 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 文件,包元素定義應該包應該輸出什麼。

pom.xml

<project ...>
4.0.0
com.yiibai
NumberGenerator
jar
1.0-SNAPSHOT

在終端輸入 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

 最終項目的目錄結構, 如下圖片 :

使用Maven創建Java項目

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