如何用Maven创建一个普通Java项目
一下内容包括:用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>