SpringBoot项目的两种打包方式

情况概述

在SpringBoot项目中使用“mvn package”进行打包操作时,打包生成的jar文件一般只有几十K左右,因为缺少依赖的jar包,所以无法直接运行。

为了能让SpringBoot运行,需要其生成的jar包和项目依赖的jar包等统一再次打包,然后才可以通过“java -jar"的方式运行。

将SpringBoot项目打包成一个可运行的jar文件,通常有两种方式:

  1. 在pom.xml中使用spring-boot-maven-plugin插件
  2. 在pom.xml中给properties节点添加新的配置

方式一:使用spring-boot-maven-plugin插件

在项目的pom.xml中配置spring-boot-maven-plugin插件,其中的关键goal是repackage。

......
    <build>
        <plugins>
           ...
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                	<!--项目的启动类-->
                    <mainClass>cn.akioyuan.springdemo.SpringDemoApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
....

这种方式看着添加配置较多,但是在配置完成后,只需要重新执行“mvn package”即可。
执行之后,在项目的target目录看到两个文件。分别是:

  1. my-springboot-demo-0.0.1-SNAPSHOT.jar.original
  2. my-springboot-demo-0.0.1-SNAPSHOT.jar

可以看到,以original结尾的文件,还是只有几十K,这是没有安装springboot打包插件时,"mvn package"生成的jar文件。

而另一个jar文件通常有几十M,这是采用springboot插件后,再次打包生成的文件。这个文件包括了项目的代码和允许所依赖的各种jar文件。

方式二:在pom.xml的properties节点添加新的配置

如果项目的pom.xml文件以是spring-boot-starter-parent做为父类,类似有如下配置

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.2.2.RELEASE</version>
	<relativePath/> 
</parent>

则可以不使用spring-boot-maven-plugin插件,只需要pom.xml的properties节点中添加一个子节点。

<properties>
	......
	<!--项目启动类-->
	<start-class>cn.akioyuan.springdemo.SpringDemoApplication</start-class>
	......
</properties>

但是这时,再次执行“mvn package”的话,生成的jar文件仍然只有几十K,跟原来没啥区别。

这时需要在项目的目录下,执行如下命令:

mvn package spring-boot:repackage

# 或者顺便跳过测试代码的编译和运行
mvn -Dmaven.test.skip=true package spring-boot:repackage

-Dmaven.test.skip=true:跳过测试代码的编译和运行
-DskipTests:跳过测试代码的运行

执行后,就会在项目的target目录下看到熟悉的两个文件了。

两种方式的比较

个人相对喜欢第一种方式,因为配置更灵活一些,可以设置要将哪些依赖jar进行打包。例如在配置插件时:

<plugin>
	......
	<configuration>
		<mainClass>cn.akioyuan.springdemo.SpringDemoApplication</mainClass>
		<layout>ZIP</layout>
		<!-- 指定依赖jar,一般是项目下的其它变动频繁的子项目 -->
		<includes>
			<include>
				<groupId>cn.akioyuan.onlinecourse</groupId>
				<artifactId>common-utils</artifactId>
			</include>
			<include>
				<groupId>cn.akioyuan.onlinecourse</groupId>
				<artifactId>service-edu</artifactId>
			</include>
		</includes>
		
	</configuration>
	......
</plugin>

这样的话,打包后的jar文件,就只包括项目文件和指定的依赖文件,会比将全部依赖文件都打包要小很多,通常不超过5M。上传到服务器很有优势:)

操作流程

  1. 先将全部依赖打包生成一个大的jar文件,再将此jar文件解压,将相关依赖复制到一个文件夹(commonlib)中。这里需要注意的是要剔除子项目生成的jar文件。
  2. 指定项目依赖的子项目,重新打包,生成小的jar文件。
  3. 执行“java -jar”时,指定commlib即可
java -server -Xms128m -Xmx512m --Dloader.path=./commonlib -jar ./my-springboot-demo-0.0.1-SNAPSHOT.jar
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值