上海网站微信平台建设,建设网站用英文怎么说,淘宝指数网站,保山专业的网站建设场景
最近在学习使用Jenkins自动化部署分布式微服务的时候#xff0c;需要将微服务打成Jar包发送到服务器制作成镜像供Jenkins拉取运行#xff0c;了解到 spring-boot-maven-plugin 插件可以完成Maven工程的打包任务。
问题
直接在父pom文件引入如下插件将会导致Maven打的…场景
最近在学习使用Jenkins自动化部署分布式微服务的时候需要将微服务打成Jar包发送到服务器制作成镜像供Jenkins拉取运行了解到 spring-boot-maven-plugin 插件可以完成Maven工程的打包任务。
问题
直接在父pom文件引入如下插件将会导致Maven打的微服务Jar包不会将外部依赖导入其中且其他模块在依赖本模块的时候可能出现找不到类的报错。即无法通过 java -jar xxx.jar 命令来启动服务。
buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build原因
spring-boot-maven-plugin 打出来的Jar包默认是不可依赖的需要进行一些额外的配置。 比如一个微服务工程中往往会抽取出来一个 common 公共模块在 common 公共模块中使用了 spring-boot-maven-plugin 的默认配置build其他依赖了 common 模块的比如 provider 或者 order 在使用打包命令进行打包时就会出错错误是在 provider 或者 order 中找不到 common 中的类原因就是此插件默认默认打包出来的Jar是不可依赖的。
解决方案
在父工程pom文件和公共模块pom文件做一些修改
!-- 父pom --buildplugins!-- 资源文件拷贝插件 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-resources-plugin/artifactIdconfigurationencodingUTF-8/encoding/configuration/plugin!-- Java编译插件 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/plugin!-- maven打包插件 --plugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/plugin/plugins/build!-- common pom --buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId!-- 这个属性为可执行jar包的名字后缀 --configurationclassifierexec/classifier/configuration/plugin/plugins/build!-- 其余子模块会继承父模块 --配置完后在进行 mvn clean package 或者 mvn clean install 命令打包服务后可用 java -jar xxx.jar 正常启动。
其他细节
在使用 spring-boot-maven-plugin 插件进行打包操作的时候强烈建议指明JDK版本不然可能在使用了一些Java8新特性的时候可能受到类似不识别Lambda请使用Resource8这样的错误。
propertiesjava.version1.8/java.versionmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/properties原文参考 https://blog.csdn.net/DamonREN/article/details/85091900