Maven项目打包可执行jar包

Stars-one 2020年11月19日 156次浏览 本篇字数为2,051字

本文为作者原创,转载请注明出处,谢谢配合
作者:Stars-one
链接:https://stars-one.site/2020/11/19/packge-jar-by-maven-plugin


我们在使用Maven的时候,经常需要对项目进行打包部署,如果是Spring Boot项目还好,直接通过命令install即可编译当前项目并生成一个可执行的jar包,如果我们不是Spring Boot项目的话,那么可以选择Maven的插件进行打包操作

搜集网上的资料,常见的Maven打包有三个,分别为maven-assembly-pluginmaven-shade-plugin,maven-jar-plugin

plugin说明
maven-jar-pluginmaven 默认打包插件,用来创建 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即可进入编译,并将文件输出到你上述代码配置好的输出文件夹中

编译打成jar包

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>

javafx打包

**打包出来的文件不是单个文件,而是一个文件夹,**里面包含一个lib文件夹及主程序jar包文件,lib文件夹中放了依赖的各个jar包,输出目录在target/jfx文件夹中

参考

maven-assembly-plugin 入门指南 - Boblim - 博客园

相关标签