通过maven打包可执行jar
1. 可执行jar理解
直接使用mvn package对项目进行打包时,如果使用java -jar xxx.jar
运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class)、ClassNotFoundException(找不到依赖包)
等错误。
要想jar包能直接通过java -jar xxx.jar运行,必要条件是:
1、在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里;
2、要能加载到依赖包。
2. 几种常见方案
注: 本章所有源代码均在: https://gitee.com/shuanglin666/mvn-build-exe-jar
2.1 使用maven-jar-plugin和maven-dependency-plugin
- pom文件plugin配置
其中maven-jar-plugin用来打成jar包, 指定mainClass位置等
maven-dependency-plugin用来将依赖也打动包里面, 并且能被mainsClass识别.
如果需要详细了解打包结构, 可以将jar包unzip解压查看.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.wsl.test.mvn.build.jar.dep.BootStrap1</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
-
执行mvn clean package打包
-
运行jar包
java -jar java -jar mvn-jar-and-dep-1.0-SNAPSHOT.jar
2.2 使用maven-assembly-plugin
- pom文件plugin配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<archive>
<manifest>
<mainClass>com.wsl.test.mvn.build.assembly.BootStrap2</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>
</plugins>
</build>
-
执行mvn package打包
-
运行jar包
java -jar mvn-assembly-1.0-SNAPSHOT-jar-with-dependencies.jar
2.3 使用maven-shade-plugin
- pom文件plugin配置
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.wsl.test.mvn.build.shade.BootStrap3</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
-
运行mvn clean package打包
-
运行jar
java -jar mvn-shade-1.0-SNAPSHOT.jar