2011-05-17 54 views
6

我使用maven-assembly-plugin和「jar-with-dependencies」來打包jar。有2個依賴關係工件具有log-back.xml。第二件神器取決於第一件。我希望在最終的jar中有第二個工件的log-back.xml,但它總是包含第一個工件的log-back.xml。那我該如何控制呢?使用maven程序集插件覆蓋資源文件

謝謝

+0

這是一個特定案例的答案http://stackoverflow.com/a/24578209/1531945一般來說,操作'dependencySets'和'unpackOptions'應該能夠解決問題。 – 2016-10-31 15:52:14

回答

1

第一個神器是你自己項目的模塊嗎?如果是這樣,您可以在pom.xml的資源部分中排除log-back.xml。

<resources> 
    <resource> 
    <directory>src/main/resources</directory> 
    <excludes> 
     <exclude>log-back.xml</exclude> 
    </excludes> 
    </resource> 
    ... 
</resources> 

但是,如果當它是建立了整個罐子的範圍,這個模塊本身並不需要的日誌back.xml這僅適用。

+0

不幸的是,我無法改變第一件神器。 – 2011-05-17 07:29:29

+0

哦,好吧,那我想這會很困難。 據我所知,只能排除依賴關係的傳遞依賴關係,而不能排除依賴關係中包含的內容。 – Frank 2011-05-17 08:09:38

5

您可以使用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> 
+0

我明白了你的想法,但它不起作用。最終的jar中不包含logback.xml。也許,插件擴展了罐子,然後使用篩選器(不包括logb​​ack.xml)將它們打包到 – 2011-05-19 04:09:06

+0

它對我來說很有用。海,你必須做錯事。 – art1go 2012-01-17 14:40:58

+1

編輯assembly.xml後,這隻適用於我的第一個版本。如果我再次運行構建,它將停止工作。似乎資源複製的順序是未定義的,因此不能保證這會起作用。 – thegeko 2015-10-05 09:29:02

0

(在這個時候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」
+0

您可以使用反引號'在答案中將事物標記爲'code',例如那麼文件名就會更可讀。 – noongiya95 2017-07-27 10:57:00