2010-12-22 165 views
6

使用Maven程序集插件(版本2.2-beta-5)時,似乎組裝的jar將包含來自依賴項的資源,而不是正在彙編的項目(如果它們具有相同的路徑)。具體來說,我想弄清楚如何使用項目的log4j配置文件,而不是依賴項中的一個。Maven Assembly插件和資源

PROJECT1

-src

- 主

---資源

----的log4j.xml

如果PROJECT1具有相關性 - 稱它爲Project2 - 在src/main/resources中也有一個log4j.xml文件,然後在運行程序集插件後,彙編的jar包含Project2的log4j.xml文件而不是Project1的文件。我相信這是因爲所有的依賴關係都是首先解壓縮的,所以當它試圖解壓頂級項目時,log4j.xml文件已經存在,所以它不會被覆蓋。

是否有使彙編插件使用項目的文件,而不是依賴的?

+0

相關(類似的事實)問題與附加的細節在它的答案:[自定義maven組裝](http://stackoverflow.com/q/3493381/320399) – blong 2013-08-08 16:37:17

回答

1

一種可能性是從程序集創建中明確排除相關文件。

<dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <includes> 
      <include>${project.groupId}:Project2</include> 
     </includes> 
     <unpack>true</unpack> 
     <unpackOptions> 
      <excludes> 
       <exclude>**/log4j.xml</exclude> 
      </excludes> 
     </unpackOptions> 
    </dependencySet> 
+1

這必須在組裝權?沒有辦法只有一個maven pom文件的正確的東西在裏面。 < – ggb667 2014-04-10 16:42:52

3

像這樣的東西應該工作:

<assembly> 
    <id>without-log4j-config</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
      <unpackOptions> 
       <excludes> 
        <exclude>**/log4j.xml</exclude> 
        <exclude>**/log4j.properties</exclude> 
       </excludes> 
      </unpackOptions> 
     </dependencySet> 
    </dependencySets> 
    <files> 
     <file> 
      <source>pom.xml</source> 
      <outputDirectory>/</outputDirectory> 
     </file> 
    </files> 
    <fileSets> 
     <fileSet> 
      <useDefaultExcludes>false</useDefaultExcludes> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
     <fileSet> 
      <directory>src/main/java</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
     <fileSet> 
      <directory>src/main/resources</directory> 
      <outputDirectory>/</outputDirectory> 
     </fileSet> 
    </fileSets> 
    <moduleSets> 
     <moduleSet> 
      <includeSubModules>false</includeSubModules> 
      <sources> 
       <outputDirectoryMapping>/</outputDirectoryMapping> 
       <excludeSubModuleDirectories>false</excludeSubModuleDirectories> 
       <fileSets> 
        <fileSet> 
         <directory>src/main/java</directory> 
         <outputDirectory>/</outputDirectory> 
        </fileSet> 
        <fileSet> 
         <directory>src/main/resources</directory> 
         <outputDirectory>/</outputDirectory> 
        </fileSet> 
       </fileSets> 
      </sources> 
      <binaries> 
       <dependencySets> 
        <dependencySet> 
         <unpack>true</unpack> 
        </dependencySet> 
       </dependencySets> 
      </binaries> 
     </moduleSet> 
    </moduleSets> 
</assembly> 

你還需要這在你的POM:

 <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <appendAssemblyId>true</appendAssemblyId> 
       <descriptors> 
        <descriptor>src/main/resources/whatever-you-name-the-snippet-above.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </plugin> 

這是一個重要的組成部分:

<appendAssemblyId>true</appendAssemblyId> 

沒有它,如果你運行您的自定義程序集將被覆蓋。