如何将maven打包成一个可执行的jar包
maven打包有三种方式
- maven-jar-plugin maven 默认打包插件【springboot默认使用该方式打包】,用来创建
project jar
- maven-shade-plugin 用来打可执行包,可以直接使用java -jar 包名.jar运行
- maven-assembly-plugin 支持
定制化打包方式
,例如 apache 项目的打包方式
这里主要介绍前两种,我用的第二种,完美运行
1. maven-jar-plugin
该方式需要在打完的包同级目录创建一个lib目录来存放所依赖的jar包
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<!-- 可执行jar包需要指定入口函数 然后通过java -jar执行 -->
<mainClass>类的全路径名称</mainClass>
<!-- 是否添加依赖的jar路径配置 -->
<addClasspath>true</addClasspath>
<!-- 依赖的jar包存放位置,和生成的jar放在同一级目录下 -->
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
<!-- 不打包com.artisan.excludes下面的所有类 -->
<excludes>com/artisan/excludes/*</excludes>
</configuration>
</plugin>
</plugins>
</build>
2. Shade打包:maven-shade-plugin
该插件有两大功能
- 将依赖的jar包打到当前jar包(常规打包不会讲所依赖的jar包打进去)
- 对依赖的jar包重命名(用来隔离类)
-缺点是打包后的jar包包含所有依赖包,包体积较大
使用该插件打完包是一个可执行的jar包,该包中包含了项目中所有的第三方包
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase><!-- 绑定到package生命周期阶段上 -->
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!--默认情况下,通过mvn package生成的jar包中因为没有指定Main-Class属性,因此并不能使用-jar配置直接运行。需要配置Main-Class。-->
<!--mainClass可有可无,加上的话则直接生成可运行jar包 通过java -jar xxx.jar执行-->
<!--<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.App</mainClass>
</transformer>
</transformers>-->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven-assembly-plugin
日常使用较多的是该插件,因为他可以使用配置的方式来让打包后的文件清晰有条理
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>${maven-assembly-plugin.version}<version>
<executions>
<execution>
<id>make-assembly</id>
<!-- 绑定到package生命周期 -->
<phase>package</phase>
<goals>
<!-- 只运行一次 -->
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 配置描述符文件 -->
<descriptor>src/main/assembly/assembly.xml</descriptor>
<!-- 也可以使用Maven预配置的描述符,默认打包所有
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs> -->
</configuration>
</plugin>
</plugins>
</build>