maven打可執行包時多依賴包同名配置文件衝突的解決方法

項目使用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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章