问题场景:
最近在使用环境分离,必须用到maven-resources-plugin来替换配置文件变量。遇到了一些问题。
- 程序写好了需要打包为packge.jar。
- 恰好本地使用了一些jar包(如:them.jar)作为依赖。
- jar包路径就在项目根目录的 lib 文件夹
问题1:本地依赖的jar包无法打包到程序包中
打完的包本地跑没有任何问题,发布到线上就找不到jar包报错:找不到 them.jar。为了找到问题测试了一下打包出 packge.jar 以后,将 lib 文件夹改为 lib1 运行 packge.jar 就报错找不到 them.jar ,看起来是没有打包进去。
问题1解决:
最终发现是没有打包进去,修改配置打包进去:
1、增加 project.repositories.dependency.scope 值为 system。
2、增加 project.build.plugins.plugin.configuration.includeSystemScope 值为 true。
<?xml version="1.0" encoding="UTF-8"?>
<project>
<repositories>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.31</version>
<!-- !!!注意这里,加上即可!!! -->
<scope>system</scope>
<!-- !!!注意这里,加上即可!!! -->
<systemPath>${project.basedir}/lib/them.jar</systemPath>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}-${spring.profiles.active}</finalName>
<plugins>
<!-- 外部 lib 导入到 jar 包中 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.2.RELEASE</version>
<configuration>
<fork>true</fork>
<!-- !!!注意这里,加上即可!!! -->
<includeSystemScope>true</includeSystemScope>
<!-- !!!注意这里,加上即可!!! -->
<mainClass>com.test.TestApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
问题2:发现 packge.jar 解压 them.jar 在其中,但是还是不生效。
说明还是引用的项目根目录 /lib 里的 jar 包。
解决问题2:
配置问题,这里使用了 maven-resources-plugin ,就要使用其内部的 resource 不能使用 build.resource 标签了。
<?xml version="1.0" encoding="UTF-8"?>
<project>
<repositories>
...
</dependencies>
<build>
<finalName>${project.artifactId}-${project.version}-${spring.profiles.active}</finalName>
<!-- 替换变量用 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>default-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>target/classes</outputDirectory>
<useDefaultDelimiters>false</useDefaultDelimiters>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<!-- !!! 使用这里面的 resources !!! -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<!-- !!! 使用这里面的 resources !!! -->
</configuration>
</execution>
</executions>
</plugin>
<!-- !!! 外部 resources 弃用!!! -->
<!-- <resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>-->
<!-- !!! 外部 resources 弃用!!! -->
</build>
</project>