maven打包可运行jar包
一、pom文件
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>fengcan.RunApp</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef> jar-with-dependencies </descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins> </build>
两个插件:
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-assembly-plugin</artifactId>
1、其中maven-compiler-plugin在这里的功能主要是配置jdk版本和跳过测试代码(src/test/java),如果同其他方式代替则可省略maven-compiler-plugin。
2、而maven-assembly-plugin,插件才是打包可运行jar包的主要插件。<mainClass>fengcan.RunApp</mainClass>是指定运行主类的配置。如下图:
二、运行方式
在有pom文件的路径下打开命令行工具:
先通过:mvn -verison,检查mvn是否安装成功
1、mvn clean assembly:single,该命令只打包出一个可运行的jar。
如下图:target目录下
2、mvn clean assembly:single,该命令相当于mvn package和mvn assembly:single。此时mvnpackage会生成一个只用编译后classes的文件。
如下图:mvn clean package命令结果:
而mvn clean assembly:assembly,则是:
3、如何通过mvn clean package来打包
修改pom文件
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>fengcan.RunApp</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef> jar-with-dependencies </descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
新加了:
<executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions>
该配置表示在执行package命令时,执行assembly里的single命令。当然也可将single改成assembly,但是没有意义,只会增加打包步骤,结果一样。
然后执行:mvn clean package
三、指定jdk和编码的两种方式
如果不指定编码,maven会默认使用jdk1.5,那么使用1.5以上的代码会报错。
1、在maven-compiler-plugin里指定,在configuration里,指定source和target和encoding
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding><!-- 字符集编码 --> </configuration> </plugin>
2、在properties里指定
<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>produce</groupId> <artifactId>produce</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> </project>
四、跳过test代码(src/test/java)的两种方式
1、在maven-compiler-plugin里指定,在configuration里,指定skip
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <skip>true</skip> </configuration> </plugin>
2、使用命令指定
添加:-DskipTests 或 -Dmaven.test.skip=true
如:
mvn clean package -DskipTests
mvn clean package -Dmaven.test.skip=true