上海网站seo策划襄阳网站推广优化技巧
Maven 在打包时会将所依赖的 jar 包全部打包进去,包含了所有的依赖和资源文件,就会导致打出来的包比较大。如果再上传服务器,那么耗时特别长。
由于依赖包变化小,占用空间大,而且大部分情况是添加一次后,就会很少去做调整;但每次修改代码,都需要重新把他们构建 jar 中去,往服务器上传、发布,生成大量的资源、带宽、时间的浪费。
于是通过 pom.xml 配置把 lib 和 jar 拆开,配置如下:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot-dependencies.version}</version><configuration><!-- 指定该jar包启动时的主类[建议] --><mainClass>com.xh.pack.PachApplication</mainClass><!--使用-Dloader.path需要在打包的时候增加<layout>ZIP</layout>,不指定的话-Dloader.path不生效--><layout>ZIP</layout><!--这里是填写需要包含进去的jar,必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来,如果没有则nothing ,表示不打包依赖 --><includes><include><!-- 排除所有Jar --><groupId>nothing</groupId><artifactId>nothing</artifactId></include></includes></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><!--拷贝依赖到jar外面的lib目录--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.1.1</version><executions><!--导出所有的 jar 包--><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></plugins>
</build>
这种方式打的包,在项目启动时,需要通过 -Dloader.path 指定 lib 的路径
java -Dloader.path=./lib -jar xxx.jar
如果引用的依赖是自己公司的其它模块或私有的依赖,那么就不宜打到外部的 lib,不然就会需要经常上传更新。可以使用保留依赖的方式把依赖文件打包到 jar 中。
补充
layout 配置与 META-INF/MANIFEST.MF 下的信息息息相关,配置关系如下:
JAR:即通常的可执行 jar。
Main-Class: org.springframework.boot.loader.JarLauncher
WAR:即通常的可执行war,需要的servlet容器依赖位于WEB-INF/lib-provided
Main-Class: org.springframework.boot.loader.warLauncher
ZIP:即DIR,类似于JAR
Main-Class: org.springframework.boot.loader.PropertiesLauncher
MODULE:将所有的依赖库打包(scope为provided的除外),但是不打包Spring Boot的任何Launcher
NONE:将所有的依赖库打包,但是不打包Spring Boot的任何Launcher