失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > springboot 打 jar 包分离依赖 lib 和 配置文件

springboot 打 jar 包分离依赖 lib 和 配置文件

时间:2019-04-23 21:38:43

相关推荐

springboot 打 jar 包分离依赖 lib 和 配置文件

springboot 打 jar 包分离依赖 lib 和 配置文件

前言
先前发布 boot 项目的时候,改动一点东西,就需要将整个项目重新打包部署,十分不便,故把依赖 lib 从项目分离出来,每次部署只需要发布代码即可。
半自动化步骤
步骤1,更换 maven 的 jar 打包插件
先前使用的是 spring-boot-maven-plugin 来打包这个插件会将项目所有的依赖打入 BOOT-INF/lib 下替换为 maven-jar-pluginaddClasspath 表示需要加入到类构建路径classpathPrefix 指定生成的 Manifest 文件中 Class-Path 依赖 lib 前面都加上路径,构建出 lib/xx.jar

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>${maven-jar-plugin.version}</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>com.asiainfo.jtdp.Stat3rdMain</mainClass></manifest></archive></configuration></plugin>

步骤2,拷贝依赖到 jar 外面的 lib 目录

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>${maven-dependency-plugin.version}</version><executions><execution><id>copy-lib</id><phase>prepare-package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib</outputDirectory><overWriteReleases>false</overWriteReleases><overWriteSnapshots>false</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><includeScope>compile</includeScope></configuration></execution></executions></plugin>

步骤3: 在和 jar 包同级的目录下新建一个 config 目录,放入 application.yml 文件

这里可能有小伙伴有疑问了,打包的 jar 里面不是应该有 application.yml 文件吗,这里为什么再放一份?

这是因为 springboot 读取配置有一个优先级,放在jar包外面 config 目录优先级最高,主要是便于从外部修改配置,而不是改 jar 包中的 application.yml 文件。优先级如下:

当前目录的 config 目录下当前目录classpath 的 config 目录下classpath 的根目录

步骤4:注意一个依赖的坑

通过 java -jar 的方式启动项目总是报如下错误:

ClassNotFoundException: org.springframework.boot.SpringApplication

后来发现时一个依赖的问题,问题详情可以见这个博客

-SpringBoot使用yaml作为配置文件之坑

<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId></dependency>

步骤5,愉快的启动项目

加入 --debug 可以让你可以看到比较详细的启动日志

java -jar xxx-1.0.0.jar --debug

全自动化步骤,我没懂,我没有搞成功
前面介绍的步骤中,需要手动的拷贝 application.yml 文件,并且 jar 包内外都存在配置,总感觉怪怪的(偷笑…)。这里引入一种自动化配置,将所有东西打成 zip 文件,直接发布到服务目录,解压后,即可启动。
自动化步骤1
还是同上面步骤1,2所示,指定打包插件和拷贝依赖的插件。
自动化步骤2
排除 resources 下面的 yml(因为我们需要把它放在 jar 外部,不能让 jar 打包插件将其打入 jar 包 classpath 下去)

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>${maven-jar-plugin.version}</version><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>com.asiainfo.jtdp.Stat3rdMain</mainClass></manifest></archive><!-- 排除配置文件 --><excludes><exclude>*.yml</exclude></excludes></configuration></plugin>

自动化步骤3,使用maven-assembly-plugin自定义打包
具体打包详情在assembly.xml配置中指定

<plugin><artifactId>maven-assembly-plugin</artifactId><configuration><appendAssemblyId>false</appendAssemblyId><descriptors><descriptor>src/main/resources/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin>

assembly.xml具体配置如下:将 application.yml 放在外部 config 目录下所有依赖打成 zip 压缩包

<assembly xmlns="/plugins/maven-assembly-plugin/assembly/1.1.3"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/plugins/maven-assembly-plugin/assembly/1.1.3 /xsd/assembly-1.1.3.xsd"><id>package</id><formats><format>zip</format></formats><includeBaseDirectory>true</includeBaseDirectory><fileSets><fileSet><directory>${basedir}/src/main/resources</directory><includes><include>*.yml</include></includes><filtered>true</filtered><outputDirectory>${file.separator}config</outputDirectory></fileSet><fileSet><directory>src/main/resources/runScript</directory><outputDirectory>${file.separator}bin</outputDirectory></fileSet><fileSet><directory>${project.build.directory}/lib</directory><outputDirectory>${file.separator}lib</outputDirectory><includes><include>*.jar</include></includes></fileSet><fileSet><directory>${project.build.directory}</directory><outputDirectory>${file.separator}</outputDirectory><includes><include>*.jar</include></includes></fileSet></fileSets></assembly>

自动化步骤4,解压zip,启动
美滋滋的自动化

如果觉得《springboot 打 jar 包分离依赖 lib 和 配置文件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。