2010-12-22 11 views
6

Podczas korzystania z wtyczki Maven Assembly (wersja 2.2-beta-5) wygląda na to, że zmontowany słoik zawiera zasoby z zależności, a nie projekt, który jest złożony, jeśli mają tę samą ścieżkę. W szczególności próbuję dowiedzieć się, jak użyć pliku konfiguracyjnego log4j projektu, a nie jednego z dependeci.Wtyczka i zasoby dla zespołu Maven

project1

-src

--main

--- zasoby

---- log4j.xml

Jeśli Project1 ma zależność - nazwać Project2 - który również ma plik log4j.xml w src/main/resources, a następnie po uruchomieniu wtyczki zespołu zmontowany słoik zawiera plik log4j.xml Project2 zamiast Project1. Wierzę, że dzieje się tak dlatego, że wszystkie zależności są rozpakowywane jako pierwsze, więc kiedy próbuje rozpakować projekt najwyższego poziomu, plik log4j.xml jest już obecny i nie jest nadpisywany.

Czy istnieje użycie wtyczki zespołu do korzystania z plików projektu zamiast zależności?

+0

Powiązane (podobne w rzeczywistości) pytanie z dodatkowymi szczegółami w odpowiedzi: [Custom maven assembly] (http://stackoverflow.com/q/3493381/320399) – blong

Odpowiedz

1

Jedną z możliwości jest jawne wykluczenie odpowiednich plików z tworzenia zespołu.

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

To musi iść w montażu, prawda? Nie ma sposobu, aby po prostu mieć jeden plik pom z właściwą rzeczą. : < – ggb667

3

Coś jak to powinno działać:

<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> 

i trzeba to w 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> 

Jest to ważna część:

<appendAssemblyId>true</appendAssemblyId> 

Bez niego, jeśli uruchomisz mvn assembly:assembly Twoje niestandardowe złożenie zostanie nadpisane.