2010-12-22 24 views
6

Al usar el complemento de ensamblaje de Maven (versión 2.2-beta-5) parece que el contenedor ensamblado contendrá los recursos de una dependencia en lugar del proyecto que se ensamblará si tienen la misma ruta. Específicamente estoy tratando de descubrir cómo usar el archivo de configuración log4j del proyecto en lugar de uno de dependencia.Complemento y recursos de ensamblaje de Maven

Project1

-src

--main

--- recursos

---- log4j.xml

Si Proyecto1 tiene una dependencia - llamarlo Project2 - que también tiene un archivo log4j.xml en src/main/resources luego, luego de ejecutar el complemento de ensamblaje, el contenedor ensamblado contiene el archivo log4j.xml de Project2 en lugar de Project1. Creo que esto se debe a que todas las dependencias se descomprimen primero, por lo que cuando intenta descomprimir el proyecto de nivel superior, el archivo log4j.xml ya está presente y no se sobrescribe.

¿Existe alguna posibilidad de que el complemento de ensamblaje utilice los archivos del proyecto en lugar de los de la dependencia?

+0

Pregunta relacionada (similar de hecho) con detalles adicionales en su respuesta: [Ensamblaje del servidor personalizado] (http://stackoverflow.com/q/3493381/320399) – blong

Respuesta

1

Una posibilidad es excluir explícitamente los archivos relevantes de la creación del ensamblaje.

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

Esto tiene que ir en el ensamblaje ¿verdad? No hay forma de tener solo un archivo maven pom con lo correcto. : < – ggb667

3

Algo como esto debería funcionar:

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

y necesitará esto en su 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> 

Esta es una parte importante:

<appendAssemblyId>true</appendAssemblyId> 

Sin él, si ejecuta mvn assembly:assembly su ensamblaje personalizado se sobrescribirá.

Cuestiones relacionadas