spring boot打包默认是jar模式,这样会把所有第三方依赖的包都包含进去,直接以java -jar启动,方便倒是很方面,但是jar包会很大,经常达到100多M,其中,90%都是第三方依赖jar包,上传的时候,会很慢。
由于发布到生产的时候,使用网页上传,然后重启,jar包过大,会引起上传超时,故而页面没法知道到底是打包成功没有,为了解决该问题,需要在打包时把第三方jar包剔除,只留下class和配置文件。
方法如下:
pom.xml添加:
<build>
<!--xml文件跟代码使用相同的source的时候增加下面配置,才可以扫描到对应xml-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<!--复制第三方 jar 到项目目录下的 target/lib/ 下-->
<execution>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeScope>provided</excludeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.ec.shoppingcart.App</mainClass>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
需要注意的有:
1.把第三方依赖包打到lib目录下,方便拷贝到生产环境;
2.configuration 标签中添加:ZIP 该属性;
3.inclouds添加坐标为nothing的配置;
这样,生成的jar包就会只包含class和配置文件。
最后,启动jar时,指定jar的路径: java -Dloader.path=/home/test/lib 这样,启动时,会自动在/home/test/lib目录下寻找jar依赖。