在本篇文章中,將展示如何使用 Maven 來創建一個 Java 項目,導入其到Eclipse IDE,并打包 Java 項目到一個 JAR 文件。
開發環境介紹
IDE: MyEclipse 10.7
jdk: 1.6
maven:apache-maven-3.2.5
基本環境只要上面這些就行.
確保Maven安裝正確.
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 模板列表將列出。
例如,這里的工作目錄是:E:\WorkSpace\Study,執行命令過程時間可能比較久,看個人的網絡狀況。
E:\WorkSpace\Study>mvn archetype:generate -DgroupId=com.gp6 -DartifactId=MavenTest
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: E:\WorkSpace\Study
[INFO] Parameter: package, Value: com.yiibai
[INFO] Parameter: groupId, Value: com.yiibai
[INFO] Parameter: artifactId, Value: MavenTest
[INFO] Parameter: packageName, Value: com.yiibai
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: E:\WorkSpace\Study\MavenTest
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項目命名 “MavenTest”, 而整個項目的目錄結構會自動創建。
注意
有少數用戶說 mvn archetype:generate 命令未能生成項目結構。 如果您有任何類似的問題,不用擔心,只需跳過此步驟,手動創建文件夾,請參閱下面的項目結構。
2.Maven目錄布局
使用 mvn archetype:generate + maven-archetype-quickstart 模板, 以下項目的目錄結構被創建。
MavenTest
|-src
|---main
|-----java
|-------com
|---------gp6
|-----------App.java
|---test|-----java
|-------com
|---------gp6
|-----------AppTest.java
|-pom.xml
所有的源代碼放在文件夾 /src/main/java/, 所有的單元測試代碼放入 /src/test/java/.
附加的一個標準的 pom.xml 被生成。這個POM文件類似于 Ant build.xml 文件,它描述了整個項目的信息,一切從目錄結構,項目的插件,項目依賴
3. Eclipse IDE
為了使它成為一個 Eclipse 項目,在終端進入到 “MavenTest” 項目,鍵入以下命令:
E:\WorkSpace\Study\MavenTest>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 "MavenTest" to E:\WorkSpace\Study\MavenTest.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.104 s
[INFO] Finished at: 2017-05-03T15:13:59+08:00
[INFO] Final Memory: 15M/224M
[INFO] ------------------------------------------------------------------------
執行以上命令后,它自動下載更新相關資源和配置信息(需要等待一段時間),并產生 Eclipse IDE所要求的所有項目文件。要導入項目到Eclipse IDE中,選擇 “File -> Import… -> General->Existing Maven Projects”
項目導入到 Eclipse IDE中。
4. 更新POM
默認的 pom.xml 太簡單了,很多時候,你需要添加編譯器插件來告訴 Maven 使用哪個 JDK 版本是用來編譯項目
<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>
從更新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 普通的等.
<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.gp6</groupId>
<artifactId>MavenTest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>MavenTest</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<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>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在終端,再次發出同樣的命令 mvn eclipse:eclipse ,Maven將從Maven中心儲存庫下載插件項目依賴關系(JUnit),它會自動保存到你的本地倉庫。
5. 更新業務邏輯
測試驅動開發(TDD),先更新單元測試,以確保應用程序(APP)對象有一個方法來生成包含恰好36位字母表的唯一密鑰。
- AppTest.java
package com.gp6;
import junit.framework.TestCase;
import org.junit.Assert;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest extends TestCase{
@Test
public void testLengthOfTheUniqueKey() {
App obj = new App();
Assert.assertEquals(36, obj.test().length());
}
}
- App.java
package com.gp6;
import java.util.UUID;
public class App {
public static void main( String[] args ){
App obj = new App();
System.out.println("Unique ID : " + obj.test());
}
public String test(){
String id = UUID.randomUUID().toString();
return id;
}
}
6. Maven 打包
將使用Maven這個項目,并輸出編譯成一個 “jar” 的文件。 請參考 pom.xml 文件,包元素定義應該包應該輸出什么。
在終端輸入 mvn package :
E:\WorkSpace\Study\MavenTest> mvn package
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.gp6.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.083 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ MavenTest ---
[INFO] Building jar: E:\WorkSpace\Study\MavenTest\target\MavenTest-1.0-SNAPSHOT
jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.237 s
[INFO] Finished at: 2017-05-03T16:21:31+08:00
[INFO] Final Memory: 14M/217M
[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)...
####### 7. 示例
從項目的 jar 文件運行應用程序示例
E:\WorkSpace\Study\MavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 94e5fd1a-c038-415f-a8ed-7fc58c397369
E:\WorkSpace\Study\MavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 48df568a-4b4b-4964-b767-664e206ca4b5
E:\WorkSpace\Study\MavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 4ac9156c-2e4a-45f4-8644-0707ae28d5a6