我使用maven-assembly-plugin和「jar-with-dependencies」來打包jar。有2個依賴關係工件具有log-back.xml。第二件神器取決於第一件。我希望在最終的jar中有第二個工件的log-back.xml,但它總是包含第一個工件的log-back.xml。那我該如何控制呢?使用maven程序集插件覆蓋資源文件
謝謝
我使用maven-assembly-plugin和「jar-with-dependencies」來打包jar。有2個依賴關係工件具有log-back.xml。第二件神器取決於第一件。我希望在最終的jar中有第二個工件的log-back.xml,但它總是包含第一個工件的log-back.xml。那我該如何控制呢?使用maven程序集插件覆蓋資源文件
謝謝
第一個神器是你自己項目的模塊嗎?如果是這樣,您可以在pom.xml的資源部分中排除log-back.xml。
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>log-back.xml</exclude>
</excludes>
</resource>
...
</resources>
但是,如果當它是建立了整個罐子的範圍,這個模塊本身並不需要的日誌back.xml這僅適用。
不幸的是,我無法改變第一件神器。 – 2011-05-17 07:29:29
哦,好吧,那我想這會很困難。 據我所知,只能排除依賴關係的傳遞依賴關係,而不能排除依賴關係中包含的內容。 – Frank 2011-05-17 08:09:38
您可以使用unpackOptions來實現此目的。嘗試像下面的內容:
<assembly>
...
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<includes>
<include>${groupId}:${artifact.whose.logback.is.to.be.excluded} </include>
</includes>
<unpack>true</unpack>
<unpackOptions>
<excludes>
<exclude>**/logback.xml</exclude>
</excludes>
</unpackOptions>
</dependencySet>
<dependencySet>
<outputDirectory>/</outputDirectory>
<excludes>
<exclude>${groupId}:${artifact.whose.logback.is.to.be.excluded}</exclude>
</excludes>
<unpack>true</unpack>
</dependencySet>
</dependencySets>
</assembly>
(在這個時候Maven的組裝插件的最新版本:3.0.0)
我與組裝構建有同樣的問題。
我有兩個相同的屬性文件,但具有不同的內容(一個很好,另一個覆蓋缺少聲明的第一個)。
問題是我終於有錯誤的配置文件替換我的裝配jar中的其他。
我發現覆蓋該文件的唯一干淨的解決方案是:
1 - 補充一點,我想保留在我的項目打下良好的文件: 例如:src/main/resources/META-INF/services/myfileWhichOverwriteTheBadDependenciesRessources.xml
2 - 添加
<fileSet>
<directory>${project.main.resources}/META-INF</directory>
<outputDirectory>META-INF</outputDirectory>
<filtered>true</filtered>
</fileSet>
(即「project.main.resource」屬性是在我的情況下設置好的爲「的src /主/資源」)
:與「過濾」文件集在我的組件描述符設置好的爲「true」您可以使用反引號'在答案中將事物標記爲'code',例如那麼文件名就會更可讀。 – noongiya95 2017-07-27 10:57:00
這是一個特定案例的答案http://stackoverflow.com/a/24578209/1531945一般來說,操作'dependencySets'和'unpackOptions'應該能夠解決問題。 – 2016-10-31 15:52:14