新建Maven工程
建目录无疑是个烦人的活儿,万幸Maven提供了一种快速建立工程目录的方法,使用该方法可以快速生成一个标准的工程目录结构。
在命令行下输入以下命令,注意修改参数以适应自己的工程。
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
生成的目录如下:
my-app
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- com
| `-- mycompany
| `-- app
| `-- App.java
`-- test
`-- java
`-- com
`-- mycompany
`-- app
`-- AppTest.java
src/main/java
中是工程源码,src/test/java
中是测试源码。
也许你搞不清楚如何填写之前那条命令的参数。没关系,Maven还提供了交互式的配置方式。你只需要输入mvn archetype:generate
命令即可。接下来只要根据提示Next就好。
到此为止,我们的工程目录和pom.xml
都生成好了,下一步就可以编写主程序代码了。
编写主代码并编译
在hello/src/main/java/com/semonx/app
下新建一个Hello.java
,删除原来的java文件。另外,这个目录是我根据我的项目生成的。
在Hello.java
中编写如下代码:
package com.semonx.app;
/**
* Hello world!
*
*/
public class Hello
{
public String sayHello()
{
return "Hello Maven!";
}
public static void main( String[] args )
{
System.out.println( new Hello().sayHello() );
}
}
在hello
目录下,通过命令行执行mvn clean compile
命令编译源码。
编译成功后,在hello/target/classes/com/semonx/app
下可以看到生成的Hello.class
文件。在hello/target/classes
下执行java com.semonx.app.Hello
命令运行class文件,可以看到命令行输出了Hello Maven!
。
.class
文件已经成功生成,下一步我们将通过Maven对代码进行单元测试。
编写测试代码
进入hello/src/test/java/com/semonx/app
,删除原来的java文件,新建HelloTest.java
,在HelloTest.java
中编写测试代码如下:
package com.semonx.app;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
/**
* Unit test for simple Hello.
*/
public class HelloTest
{
@Test
public void testSayHello()
{
Hello hello = new Hello();
String result = hello.sayHello();
assertEquals("Hello Maven!", result);
}
}
然后在hello
目录下执行mvn clean test
命令进行测试。
如果遇到不支持注解的情况请在pom.xml
中加入如下配置:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
打包和安装
打包
打包十分简单,在hello
目录下执行mvn clean package
命令打包即可。
打包完成后就可以在hello/target
下看到生成的hello-1.0-SNAPSHOT.jar
文件。
安装
Maven可以通过安装命令把生成的jar包安装到本地仓库中。安装命令也很简单,在hello
目录下执行mvn clean install
命令安装即可。
安装成功后,在用户目录下的.m2\repository\com\semonx\app\hello\1.0-SNAPSHOT
中就能找到项目的jar包。
运行
找到生成的jar包,使用压缩软件打开,查看META-INF/MANIFEST.MF
文件内容如下:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: Semon
Created-By: Apache Maven 3.5.0
Build-Jdk: 1.8.0_77
可以看到MANIFEST.MF
中并没有Main-Class
这一行,所以这样的jar包是无法直接运行的。为了生成可直接执行的jar文件,需要借助maven-shade-plugin
插件。
配置插件如下:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.semonx.app.Hello</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
这里需要注意的是<Main-Class>
标签,它的值应该是main
函数所在的类。
然后我们重新打包,在hello
下执行java -jar target\hello-1.0-SNAPSHOT.jar
命令,可以看到命令行中输出了Hello Maven!
。