一下內容包括:用Maven創建一個普通Java項目,並把該項目轉成IDEA項目,導入到IDEA,最后把這個項目打包成一個jar文件。
有時候運行mvn命令失敗,重復運行幾次就OK了,無解(可能因為網絡問題,一些文件沒下載到,搭建私服后就不會了)。
1、用Maven模板創建一個項目
打開控制台,進入到想要創建項目的目錄,然后運行如下命令,參數自由填寫:
1 mvn archetype:generate -DgroupId={project-packaging} 2 -DartifactId={project-name} 3 -DarchetypeArtifactId=maven-archetype-quickstart 4 -DinteractiveMode=false
參數說明:
1.1、-DgroupId:包名,如:com.google
1.2、-DartifactId: 項目名稱,如:NumberGenerator
1.3、-DarchetypeArtifactId: 項目的類型,Maven提供了很多模板,如果你沒寫這個,創建的時候就會列出一大堆模板讓你選擇
1.4、-DinteractiveMode: 是否使用交互模式,如果是true,那么在創建過程中就要手動輸入一些參數
一個實際例子:
1 mvn archetype:generate -DgroupId=com.mkyong -DartifactId=NumberGenerator 2 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
在上面的例子中,Maven會創建一個名為"NumberGenerator"的項目,並把項目的目錄結構自動創建好,如果你的命令執行失敗了,那就手動創建吧。
2、項目結構
使用mvn archetype:generate
+ maven-archetype-quickstart模板創建出來的項目結構如下:
1 NumberGenerator 2 |-src 3 |---main 4 |-----java 5 |-------com 6 |---------mkyong 7 |-----------App.java 8 |---test 9 |-----java 10 |-------com 11 |---------mkyong 12 |-----------AppTest.java 13 |-pom.xml
所有源代碼放在/src/main/java/目錄里,所有測試代碼放在/src/test/java/目錄里。
除此之外還會生成一個標准的pom.xml文件,里面描述了整個項目的信息,所有信息都是從目錄結構里來的,包括項目插件、依賴關系以及如何編譯項目等等,里面內容如下,具體查看official POM guide.。
1 <project xmlns="http://maven.apache.org/POM/4.0.0" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 4 http://maven.apache.org/maven-v4_0_0.xsd"> 5 <modelVersion>4.0.0</modelVersion> 6 <groupId>com.mkyong</groupId> 7 <artifactId>NumberGenerator</artifactId> 8 <packaging>jar</packaging> 9 <version>1.0-SNAPSHOT</version> 10 <name>NumberGenerator</name> 11 <url>http://maven.apache.org</url> 12 <dependencies> 13 <dependency> 14 <groupId>junit</groupId> 15 <artifactId>junit</artifactId> 16 <version>3.8.1</version> 17 <scope>test</scope> 18 </dependency> 19 </dependencies> 20 </project>
3、IDEA IDE
要把這個項目轉成IDEA項目,要進入到"NumberGenerator"目錄,然后運行如下命令,Maven將會生成IEAD所需的所有文件:
1 mvn idea:idea -DjdkName=1.7
此處的JDK版本一定要寫,我沒寫時運行就出錯了(可能因為網絡問題,一些文件沒下載到,搭建私服后就不會了)。JDK版本可通過運行 java -version 獲得。mvn idea:idea 命令詳解:http://maven.apache.org/plugins/maven-idea-plugin/usage.html。
導入后如下圖所示:
4、更新pom.xml文件
默認的pom.xml文件太簡單了,大多數時候你需要添加編譯插件,告訴Maven用哪個JDK版本來編譯你的項目(默認是1.4,太舊了)。
1 <plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-compiler-plugin</artifactId> 4 <version>2.3.2</version> 5 <configuration> 6 <!--指定JDK版本--> 7 <source>1.7</source> 8 <target>1.7</target> 9 </configuration> 10 </plugin>
把jUnit升級到4.11版本:
1 <dependency> 2 <groupId>junit</groupId> 3 <artifactId>junit</artifactId> 4 <version>4.11</version> 5 <scope>test</scope> 6 </dependency>
上面的代碼片段叫做"Maven Coordinate",你需要自己到Maven中心倉庫查找所需的"Maven Coordinate"。
完整的pom.xml:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 <groupId>com.yanyd</groupId> 5 <artifactId>NumberGenerator</artifactId> 6 <packaging>jar</packaging> 7 <version>1.0-SNAPSHOT</version> 8 <name>NumberGenerator</name> 9 <url>http://maven.apache.org</url> 10 <dependencies> 11 <dependency> 12 <groupId>junit</groupId> 13 <artifactId>junit</artifactId> 14 <version>4.11</version> 15 <scope>test</scope> 16 </dependency> 17 </dependencies> 18 <build> 19 <plugins> 20 <plugin> 21 <groupId>org.apache.maven.plugins</groupId> 22 <artifactId>maven-compiler-plugin</artifactId> 23 <version>2.3.2</version> 24 <configuration> 25 <!--JDK版本--> 26 <source>1.7</source> 27 <target>1.7</target> 28 </configuration> 29 </plugin> 30 </plugins> 31 </build> 32 </project>
在命令行再次輸入命令:mvn idea:idea -DjdkName=1.7,Maven將會自動下載編譯插件並自動升級jUnit的版本,並把依賴包放到本地倉庫里。
5、更新業務邏輯
根據驅動測試開發(TDD),先修改單元測試案例,首先要確保App對象有一個方法能夠生成一個獨一無二的36位字符串。
App.java:
1 package com.yanyd; 2 3 import java.util.UUID; 4 5 /** 6 * Generate a unique number 7 * 8 */ 9 public class App 10 { 11 12 public static void main( String[] args ) 13 { 14 App obj = new App(); 15 System.out.println("Unique ID : " + obj.generateUniqueKey()); 16 } 17 18 public String generateUniqueKey(){ 19 20 String id = UUID.randomUUID().toString(); 21 return id; 22 23 } 24 }
TestApp.java:
1 package com.yanyd; 2 3 import org.junit.Assert; 4 import org.junit.Test; 5 6 public class AppTest { 7 8 @Test 9 public void testLengthOfTheUniqueKey() { 10 11 App obj = new App(); 12 Assert.assertEquals(36, obj.generateUniqueKey().length()); 13 14 } 15 }
6、使用Maven打包
現在我們使用Maven編譯項目並打包成一個jar文件,打包成什么格式的文件,是通過pom.xml里的packaging標簽定義的。
在控制台里輸入打包命令:mvn package,Maven就會開始編譯項目,運行里面的單元測試,通過測試后就會把項目打包成一個jar文件放在project/target目錄里。
由於target目錄不會顯示在IntelliJ IDEA 里,所以只能到文件瀏覽器里查看了,最終的項目目錄結構如下:
7、運行項目
通過jar文件來運行這個App例子,在控制台輸入如下命令,即可運行程序:
1 D:\IntelliJ\maven-project\NumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.yanyd.App 2 Unique Id:47193d77-ec6f-4e95-aa94-337592f6824d 3 4 D:\IntelliJ\maven-project\NumberGenerator>java -cp target/NumberGenerator-1.0-SNAPSHOT.jar com.yanyd.App 5 Unique Id:b6c85811-e81f-4a50-82b8-afbc59bbf265 6 7 D:\IntelliJ\maven-project\NumberGenerator>