背景需求:
springboot项目开发完毕后,构建成jar包可直接运行(nohup java -jar xxx.jar &),无需再部署至tomcat,使用起来很方便。 但是实际在公司应用中需要做打包配置,把项目依赖的配置和第三方jar抽取出来,做成如下所示的结构;
目的在于:
1)实际生产环境的配置和本地配置肯定有区别。这样在实际上线时只需要单独修改配置文件后在重启即可;
2)如果某个依赖jar有修改,则只需要替换依赖的jar并重启即可,不需要重新全部再次打包上传服务器;
3)在传统jar包中,所有文件都打包到一个jar包中,jar非常臃肿,在进行服务更新部署时非常不便,单次上传文件较大;
4)若传输不稳定时导致传输失败或者使用云服务器流量有限制时。如果过实行文件分离、在依赖不改变的情况下,仅仅上传更新后的编译文件是非常方便和经济的。
插件介绍
maven-jar-plugin 这个插件式专门用来打包用的,可以配置需要打包进去的文件,程序的入口类等。maven-clean-plugin这个插件式专门用来清除历史打包文件。maven-resources-plugin 这个插件是用来拷贝资源文件的。maven-maven-dependency-plugin 这个插件是用来拷贝依赖库的。maven-assembly-plugin 可以说包含了以上插件的功能,但是可以做到更精细的控制。(可以不用)spring-boot-maven-plugin springboot 项目最重要的插件,整个项目的打包处理过程还是要依附于它。
POM文件配置示例模板
(具体作用参考注释部分)
此处仅显示build标签中的内容,在属性部分,需添加如下内容:
注意:修改<mainClass>com.test.XXXApplication</mainClass> 为你自己的启动类!
</properties><build.path>dist</build.path></properties>
<build><!-- <finalName>${project.artifactId}-${version}</finalName> --><plugins><!--清理之前生成的打包目录。 --><plugin><artifactId>maven-clean-plugin</artifactId><executions><execution><id>auto-clean</id><phase>initialize</phase><goals><goal>clean</goal></goals><configuration><skip>false</skip><filesets><fileset><directory>${build.path}</directory></fileset></filesets></configuration></execution></executions></plugin><!-- 打包时跳过测试 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin><!--打包自己的项目为jar并放入lib目录,不包含依赖。--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork>true</fork> <!-- 如果没有该配置,devtools不会生效 --><layout>ZIP</layout><!-- 注释后和依赖包一起打包 取消注释则不打包依赖 --><includes><include><groupId>nothing</groupId><artifactId>nothing</artifactId></include></includes></configuration></plugin><!-- maven编译 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><!-- 不同版本需要制定具体的版本进行编译 --><source>${java.version}</source><target>${java.version}</target></configuration></plugin><!-- 将项目中代码文件打成jar包 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><excludes><!-- 打包后的jar包中不包括配置文件 --><!-- 通常是指classpath下目录下的文件,这样可以避免编写时的找不到相应文件 --><!-- <exclude>*.xml</exclude> --><!-- <exclude>*.properties</exclude> --><exclude>*.yml</exclude></excludes><archive><manifest><!-- 依赖的jar的目录前缀 --><classpathPrefix>libs/</classpathPrefix><addClasspath>true</addClasspath><!-- 项目启动类 --><mainClass>com.test.XXXApplication</mainClass></manifest><!-- 将config目录加入classpath目录 --><manifestEntries><Class-Path>config/</Class-Path></manifestEntries></archive><!-- 指定打出的jar包路径 --><outputDirectory>${build.path}</outputDirectory></configuration></plugin><!-- 将依赖cp到lib目录下 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><!-- 自定义 --><id>copy-dependencies</id><phase>package</phase><goals><!-- 复制依赖的jar包 --><goal>copy-dependencies</goal></goals><configuration><!-- 将依赖的jar包复制到该路径下 --><outputDirectory>${build.path}/libs</outputDirectory></configuration></execution></executions></plugin><!--拷贝资源文件 copy-resources--><plugin><artifactId>maven-resources-plugin</artifactId><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>static/**</include> --><!-- <include>templates/**</include> --><include>*.yml</include></includes></resource></resources><!-- 指定复制到该目录下 --><outputDirectory>${build.path}/config</outputDirectory></configuration></execution></executions></plugin></plugins></build>
自定义配置文件启动参考
按照上述方法打包后的配置文件在config文件夹下
执行java -jar test-1.0.0.jar
若需修改配置文件,可以参考如下方法:
外置配置文件
Spring程序会按优先级从下面这些路径来加载application.yml配置文件
当前目录下的/config目录当前目录classpath里的/config目录classpath 跟目录
因此,要外置配置文件就很简单了,在jar所在目录新建config文件夹,然后放入配置文件,或者直接放在配置文件在jar目录
自定义配置文件
如果你不想使用application.yml作为配置文件,怎么办?完全没问题
java -jar test-1.0.0.jar --spring.config.location=classpath:/default.yml,classpath:/override.yml
或者
java -jar test-1.0.0.jar -Dspring.config.location=D:\config\config.yml
按Profile不同环境读取不同配置
不同环境的配置设置一个配置文件,例如:
dev环境下的配置配置在application-dev.yml 中;prod环境下的配置配置在application-prod.yml 中。
在application.properties中指定使用哪一个文件
spring.profiles.active = dev
当然,你也可以在运行的时候手动指定:
java -jar myproject.jar --spring.profiles.active = prod
如果觉得《Maven打包SpringBoot项目时分离依赖JAR 配置文件时POM文件的参考配置》对你有帮助,请点赞、收藏,并留下你的观点哦!