我们在使用Maven的时候,经常需要对项目进行打包部署,如果是Spring Boot
项目还好,直接通过命令install
即可编译当前项目并生成一个可执行的jar包,如果我们不是Spring Boot项目的话,那么可以选择Maven的插件进行打包操作。
搜集网上的资料,常见的Maven打包有三个,分别为maven-assembly-plugin
、maven-shade-plugin
,maven-jar-plugin
plugin | 说明 |
---|---|
maven-jar-plugin | maven 默认打包插件,用来创建 project jar |
maven-shade-plugin | 用来打可执行包,executable(fat) jar |
maven-assembly-plugin | 支持定制化打包方式,例如 apache 项目的打包方式 |
本文只涉及简单的使用,相关详细的配置使用请参阅其他文章
maven-assembly-plugin
插件的话,我们只需要在pom.xml
文件中的plugins
标签内添加plugin
标签即可
<!-- maven项目打jar包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 输出jar包的文件名 -->
<finalName>test</finalName>
<!-- 输出路径 -->
<outputDirectory>out</outputDirectory>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<!--入口类-->
<mainClass>site.starsone.resetrial.app.MyApp</mainClass>
</manifest>
</archive>
<descriptorRefs>
<!-- 包括所有依赖,会将依赖的jar包一起打包进入到jar包中 -->
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
之后使用,只需要点击IDEA的右边侧边栏中的插件,选中assembly
即可进入编译,并将文件输出到你上述代码配置好的输出文件夹中
maven-shade-plugin
此插件与上面的插件十分类似,唯一不同点,就是此插件可以在打包的时候自动将没有依赖的jar包忽略,但是实际测试过程中,我发现其不适用TornadoFx框架的项目(或者说是Kotlin的项目),运行jar包会报找不到xx类的错误
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<!--入口类-->
<mainClass>org.global.fairy.service.impl.Assembly</mainClass>
</transformer>
</transformers>
<!--输出jar包的文件名-->
<finalName>test</finalName>
<!--输出文件夹-->
<outputDirectory>out</outputDirectory>
<!--忽略没有依赖的jar包-->
<minimizeJar>true</minimizeJar>
</configuration>
</execution>
</executions>
</plugin>
配置与上述maven-assembly-plugin
差不多,这里不再赘述
maven-jar-plugin
maven官方自带的插件,只会将当前的项目源码编译,只会打成单个jar包,个人感觉比较这种适合发布比较单一的开源库,打包出来的jar包文件体积会比较小
生成的jar包在target目录下
补充——JavaFx的Maven打包插件
<!-- javafx打jar包插件 -->
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
<mainClass>site.starsone.resetrial.app.MyApp</mainClass>
</configuration>
</plugin>
**打包出来的文件不是单个文件,而是一个文件夹,**里面包含一个lib
文件夹及主程序jar
包文件,lib
文件夹中放了依赖的各个jar包,输出目录在target/jfx
文件夹中
评论区