当前位置: 代码网 > it编程>编程语言>Java > springboot打包JAR包瘦身lib和配置文件分离方式

springboot打包JAR包瘦身lib和配置文件分离方式

2024年11月22日 Java 我要评论
springboot打包jar包瘦身lib和配置文件分离最近项目在部署使用的过程中,传输jar包的时候发现jar包有点大,传输速度有点慢。笔者基于这个前提对项目的打包配置进行优化进行探索,一般来说li

springboot打包jar包瘦身lib和配置文件分离

最近项目在部署使用的过程中,传输jar包的时候发现jar包有点大,传输速度有点慢。

笔者基于这个前提对项目的打包配置进行优化进行探索,一般来说lib是很少修改,配置文件会根据需求会有所变动,如果讲配置文件打进jar生产环境会修改等不便等操作。

以下配置再pom.xml中 <build> <plugins>添加相关配置</plugins></build>

1.指定打包环境和跳过编译单元测试

<!--定义项目的编译环境-->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-compiler-plugin</artifactid>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
			<!--默认执行src/test/java路径下的测试用例,建议跳过执行-->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-surefire-plugin</artifactid>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>

2.jar打包排除配置文件和lib

<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-jar-plugin</artifactid>
				<version>3.2.0</version>
				<configuration>
					<!-- 不打包资源文件,如果放开全量jar也不会打进去-->
<!--					<excludes>-->
<!--						<exclude>*.yml</exclude>-->
<!--						<exclude>*.properties</exclude>-->
<!--					</excludes>-->
					<archive>
						<manifest>
							<addclasspath>true</addclasspath>
							<!-- manifest.mf 中 class-path 加入前缀 -->
							<classpathprefix>lib/</classpathprefix>
							<!-- jar包不包含唯一版本标识 -->
							<useuniqueversions>false</useuniqueversions>
							<!--指定启动入口类 -->
							<mainclass>com.xxxx.application</mainclass>
						</manifest>
						<manifestentries>
							<!--manifest.mf 中 class-path 加入资源文件目录 -->
							<class-path>./resources/</class-path>
						</manifestentries>
					</archive>
					<outputdirectory>${project.build.directory}</outputdirectory>
				</configuration>
			</plugin>

3.如果需要全量包也可以增加如下配置

便于开发环境打包使用

			<!--全量jar包,最初的打包方式,springboot的默认编译插件,默认会把所有的文件打包成一个jar,-->
			<plugin>
				<groupid>org.springframework.boot</groupid>
				<artifactid>spring-boot-maven-plugin</artifactid>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
                    <!--设置springboot的启动类或者是jar包的启动类-->
					<mainclass>com.xxxx.application</mainclass>
					<fork>true</fork>
					<addresources>true</addresources>
					<outputdirectory>${project.build.directory}/jar</outputdirectory>
				</configuration>
			</plugin>

4.将lib和配置文件单独复制出来

<!--复制关联jar包到指定lib打包目录 ,target目录下的文件夹下,按需修改 -->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-dependency-plugin</artifactid>
				<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>

			<!-- 复制配置文件到指定resources打包目录 ,target目录下的文件夹下,按需修改-->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-resources-plugin</artifactid>
				<version>3.2.0</version>
				<executions>
					<execution> <!-- 复制配置文件 -->
						<id>copy-resources</id>
						<phase>package</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<resources>
								<resource>
									<directory>src/main/resources</directory>
									<includes>
										<include>*.yml</include>
										<include>*.properties</include>
									</includes>
								</resource>
							</resources>
							<outputdirectory>${project.build.directory}/resources</outputdirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>

5.全量配置如下,拷贝即用

注意启动类的指定:

以下配置再pom.xml中 <build> 添加相关配置</build>

	<!--拆分配置文件和lib,给jar瘦身-->
		<!--启动参考命令,再jar目录执行,也可以指定绝对路径:
${project.build.directory}工程路径下的target目录
		dloader.path:加载本地lib
		dspring.config.location:加载本地配置
		server.port:指定端口
		/-/- 这个有转义,注命令要去掉/
		java -dloader.path=lib/ -jar xxxx.jar /-/-dspring.config.location=resources/ /-/-server.port=8080
		-->
		<plugins>
			<!--定义项目的编译环境-->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-compiler-plugin</artifactid>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
			<!--默认执行src/test/java路径下的测试用例,建议跳过执行-->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-surefire-plugin</artifactid>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
			<!--全量jar包,最初的打包方式,springboot的默认编译插件,默认会把所有的文件打包成一个jar-->
			<plugin>
				<groupid>org.springframework.boot</groupid>
				<artifactid>spring-boot-maven-plugin</artifactid>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<mainclass>com.xxxx</mainclass>
					<fork>true</fork>
					<addresources>true</addresources>
					<outputdirectory>${project.build.directory}/jar</outputdirectory>
				</configuration>
			</plugin>
			<!-- 打jar包 -->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-jar-plugin</artifactid>
				<version>3.2.0</version>
				<configuration>
					<!-- 不打包资源文件,如果放开全量jar也不会打进去-->
<!--					<excludes>-->
<!--						<exclude>*.yml</exclude>-->
<!--						<exclude>*.properties</exclude>-->
<!--					</excludes>-->
					<archive>
						<manifest>
							<addclasspath>true</addclasspath>
							<!-- manifest.mf 中 class-path 加入前缀 -->
							<classpathprefix>lib/</classpathprefix>
							<!-- jar包不包含唯一版本标识 -->
							<useuniqueversions>false</useuniqueversions>
							<!--指定springboot启动入口类 -->
							<mainclass>com.xxxx</mainclass>
						</manifest>
						<manifestentries>
							<!--manifest.mf 中 class-path 加入资源文件目录 -->
							<class-path>./resources/</class-path>
						</manifestentries>
					</archive>
					<outputdirectory>${project.build.directory}</outputdirectory>
				</configuration>
			</plugin>
			<!--复制关联jar包到指定lib打包目录 ,target目录下的文件夹下,按需修改 -->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-dependency-plugin</artifactid>
				<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>

			<!-- 复制配置文件到指定resources打包目录 ,target目录下的文件夹下,按需修改-->
			<plugin>
				<groupid>org.apache.maven.plugins</groupid>
				<artifactid>maven-resources-plugin</artifactid>
				<version>3.2.0</version>
				<executions>
					<execution> <!-- 复制配置文件 -->
						<id>copy-resources</id>
						<phase>package</phase>
						<goals>
							<goal>copy-resources</goal>
						</goals>
						<configuration>
							<resources>
								<resource>
									<directory>src/main/resources</directory>
									<includes>
										<include>*.yml</include>
										<include>*.properties</include>
									</includes>
								</resource>
							</resources>
							<outputdirectory>${project.build.directory}/resources</outputdirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com