# JAR启动分离依赖lib和配置 ### #方案一 * 更简单方案:https://my.oschina.net/jeecg/blog/4652920 ### #方案二 1 jar启动分离依赖lib和配置   先前发布boot项目的时候,改动一点东西,就需要将整个项目重新打包部署,十分不便,故把依赖lib从项目分离出来,每次部署只需要发布代码即可。 1.1. 半自动化步骤 1.1.1. 更换maven的jar打包插件   先前使用的是spring-boot-maven-plugin来打包,这个插件会将项目所有的依赖打入BOOT-INF/lib下,替换为maven-jar-plugin: ~~~ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.1</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>org.jeecg.JeecgApplication</mainClass> </manifest> </archive> </configuration> </plugin> ~~~   解释:     a addClasspath表示需要加入到类构建路径     b classpathPrefix指定生成的Manifest文件中Class-Path依赖lib前面都加上路径,构建出lib/xx.jar 1.1.2 拷贝依赖到jar外面的lib目录 ~~~ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-lib</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>target/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> <includeScope>runtime</includeScope> </configuration> </execution> </executions> </plugin> ~~~ 1.1.3 在和jar包同级的目录下新建一个config目录,放入application.yml文件   这里可能有小伙伴有疑问了,打包的jar里面不是应该有application.yml文件吗,这里为什么再放一份?   这是因为boot读取配置有一个优先级,放在jar包外面config目录优先级最高,主要是便于从外部修改配置,而不是改jar包中的application.yml文件。优先级如下:     当前目录的config目录下     当前目录     classpath的config目录下     classpath的根目录 1.1.4 启动项目   加入–debug可以让你可以看到比较详细的启动日志:     java -jar xxx-1.0.0.jar --debug 完整配置 ``` <build> <plugins> <!-- maven 打包插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.1</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>org.jeecg.JeecgApplication</mainClass> </manifest> </archive> </configuration> </plugin> <!-- 拷贝依赖 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-lib</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>target/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> <includeScope>runtime</includeScope> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` * 参考博客:[https://www.cnblogs.com/rey888/p/10318690.html](https://www.cnblogs.com/rey888/p/10318690.html)