項目使用maven做依賴管理和打包,依賴了drools包,drools中又依賴了kie包,兩個包都是執行必須的,兩個包的資源文件夾中都有一個叫kie.conf
的配置文件,裏面的配置內容不一樣。
在本地執行時不會衝突,但使用maven插件打包成一個可執行jar包後,java啓動運行中拋出異常。觀察日誌,發現是讀取kie.conf
中的某個key讀取失敗,然後發現有多個kie.conf
文件,maven打包時選擇了其中一個覆蓋其他,因此獲取不到想要的配置。maven打包配置如下所示:
<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
文件內容會被合併到一個文件中。打包發佈執行正常。在此記錄。
<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>