大家好,我是烤鸭:
今天分享一下springboot将jar包打包到指定目录下。
由于之前上线都是一个打包到一个jar,由于服务多了,1个包100多M,哪怕是小版本上线都需要重新上传jar包。
1.目的
将不常用的比如spring,druid等不常用打包到lib目录,这样每次上线不需要上传这些。第三方或者常改动的还打包到本身的jar包内,每次上线都会新打包。
这样原来的100多M的jar包,可以变成2、3M。
如图所示:
原来的打包方式
改后的方式:
2.修改pom
简单解释一下,includes标签内就是打入jar包第三方jar。将上面的2M的包解压缩后,就是includes的包。如图所示。
excludeGroupIds和excludeArtifactIds 是配置不在lib目录里的包,由于java启动加载的机制是优先加载jar包,
再加载外部目录,如果jar包都存在两个地方,这样配置就没有意义了,每次还是得重新发布lib目录,所以将includes
中的包,再在excludeGroupIds 和 excludeArtifactIds 配置上。
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.0.5.RELEASE</version><executions><execution><goals><goal>repackage</goal><goal>build-info</goal></goals></execution></executions><configuration><layout>ZIP</layout><includes><include><groupId>nothing</groupId><artifactId>nothing</artifactId></include><include><groupId>com.etc</groupId><artifactId>etc-manage-api</artifactId></include><include><groupId>com.etc</groupId><artifactId>etc-manage-core</artifactId></include><include><groupId>com.etc</groupId><artifactId>etc-manage-rpc-api</artifactId></include><include><groupId>com.sinoiov.etc.apollo</groupId><artifactId>apollo-spring-boot-starter</artifactId></include></includes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><excludeGroupIds>com.sinoiov.etc.apollo</excludeGroupIds><excludeArtifactIds>etc-manage-api,etc-manage-core,etc-manage-rpc-api</excludeArtifactIds><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin></plugins>
</build>
3.修改启动脚本
原脚本
java -jar etc-manage-service-basic-2.2.0.jar
现脚本 (如果相对目录不好用,就用绝对目录试试)
java Dloader.path=../lib -jar etc-manage-service-basic-2.2.0.jar