发布于 

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>