新建Maven工程
建目錄無疑是個煩人的活兒诱渤,萬幸Maven提供了一種快速建立工程目錄的方法谈况,使用該方法可以快速生成一個標準的工程目錄結構。
在命令行下輸入以下命令碑韵,注意修改參數(shù)以適應自己的工程祝闻。
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
中是測試源碼。
也許你搞不清楚如何填寫之前那條命令的參數(shù)辙纬。沒關系叭喜,Maven還提供了交互式的配置方式。你只需要輸入mvn archetype:generate
命令即可纵柿。接下來只要根據(jù)提示Next就好启绰。
到此為止,我們的工程目錄和pom.xml
都生成好了委可,下一步就可以編寫主程序代碼了。
編寫主代碼并編譯
在hello/src/main/java/com/semonx/app
下新建一個Hello.java
拾酝,刪除原來的java文件卡者。另外,這個目錄是我根據(jù)我的項目生成的材诽。
在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
目錄下恒傻,通過命令行執(zhí)行mvn clean compile
命令編譯源碼。
編譯成功后盈厘,在hello/target/classes/com/semonx/app
下可以看到生成的Hello.class
文件。在hello/target/classes
下執(zhí)行java com.semonx.app.Hello
命令運行class文件外遇,可以看到命令行輸出了Hello Maven!
契吉。
.class
文件已經(jīng)成功生成,下一步我們將通過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
目錄下執(zhí)行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
目錄下執(zhí)行mvn clean package
命令打包即可寄摆。
打包完成后就可以在hello/target
下看到生成的hello-1.0-SNAPSHOT.jar
文件。
安裝
Maven可以通過安裝命令把生成的jar包安裝到本地倉庫中婶恼。安裝命令也很簡單,在hello
目錄下執(zhí)行mvn clean install
命令安裝即可蚣录。
安裝成功后眷篇,在用戶目錄下的.m2\repository\com\semonx\app\hello\1.0-SNAPSHOT
中就能找到項目的jar包。
運行
找到生成的jar包虐杯,使用壓縮軟件打開椎椰,查看META-INF/MANIFEST.MF
文件內(nèi)容如下:
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包是無法直接運行的。為了生成可直接執(zhí)行的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
函數(shù)所在的類篙骡。
然后我們重新打包丈甸,在hello
下執(zhí)行java -jar target\hello-1.0-SNAPSHOT.jar
命令尿褪,可以看到命令行中輸出了Hello Maven!
。