maven打可执行包时多依赖包同名配置文件冲突的解决方法
项目使用maven做依赖管理和打包,依赖了drools包,drools中又依赖了kie包,两个包都是执行必须的,两个包的资源文件夹中都有一个叫kie.conf
的配置文件,里面的配置内容不一样。
在本地执行时不会冲突,但使用maven插件打包成一个可执行jar包后,java启动运行中抛出异常。观察日志,发现是读取kie.conf
中的某个key读取失败,然后发现有多个kie.conf
文件,maven打包时选择了其中一个覆盖其他,因此获取不到想要的配置。maven打包配置如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.1</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
|
知道问题后就找解决方案,使用了另一个maven打包插件解决了问题,具体配置如下所示。第一个MainfestResourceTransformer
指定了主函数,第二个AppendingTransformer
指明了要合并的配置文件。按照这种配置,项目依赖中的多个kie.conf
文件内容会被合并到一个文件中。打包发布执行正常。在此记录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.***.***.ProcessingMain</mainClass> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/kie.conf</resource> </transformer> </transformers> </configuration> </plugin>
|