2011-05-17 11 views
6

Utilizo maven-assembly-plugin con "jar-with-dependencies" para empaquetar el jar. Hay 2 artefactos de dependencias que tienen log-back.xml. El segundo artefacto depende del primero. Quiero tener log-back.xml del segundo artefacto en el jar final, pero siempre contiene log-back.xml del primero. Entonces, ¿cómo puedo controlar esto?Sobrescribir el archivo de recursos con el complemento de ensamblaje maven

Gracias

+0

Aquí hay una respuesta para un caso particular http://stackoverflow.com/a/24578209/1531945 En general, manipular 'dependencySets' y' unpackOptions' debería ser el truco. –

Respuesta

1

es el primer artefacto de un módulo de su propio proyecto? De ser así, podría excluir log-back.xml allí en la sección de recursos de pom.xml.

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

Sin embargo, esto sólo funciona si este módulo no requiere el registro-back.xml por sí mismo cuando se construye fuera del alcance de la jarra en general.

+0

Desafortunadamente, no puedo cambiar el primer artefacto. –

+0

Oh, bien, entonces creo que esto va a ser difícil. Por lo que yo sé, solo puede excluir las dependencias transitivas de las dependencias, pero no los contenidos que están agrupados dentro de una dependencia. – Frank

5

Puede usar el unpackOptions para lograr esto. Pruebe algo como lo siguiente:

<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

Tengo su idea, pero no funciona. logback.xml no está incluido en el jar final. Tal vez, el complemento expandió los contenedores y luego los empaquetó con el filtro (excluir logback.xml) –

+0

, funcionó para mí. The Sea, debes hacer algo mal. – art1go

+1

Esto funciona solo para mí en la primera compilación después de editar assembly.xml. Si ejecuto la compilación de nuevo, deja de funcionar. Parece que el orden en el que se copian los recursos no está definido, y por lo tanto no hay garantía de que esto funcione. – thegeko

0

(Con la última versión del experto-montaje-plugin en este momento: 3.0.0)

tuve el mismo problema con una estructura de montaje.

Tenía dependencias de remolque con el mismo archivo de propiedades pero con un contenido diferente (uno bueno y el otro sobreescribiendo el primero con declaraciones faltantes).

El problema fue que finalmente tuve el archivo de configuración defectuoso reemplazando al otro en mi jar de ensamblaje.

La única solución más limpia que he encontrado para sobrescribir el archivo fue:

1 - Añadir el buen archivo que quería mantener para la construcción de mi proyecto: ejemplo: src/main/resources/META-INF/services/myfileWhichOverwriteTheBadDependenciesRessources.xml

2 - Añadir un conjunto de archivos con 'filtrada' setted a 'verdadero' en mi descriptor de montaje:

<fileSet> 
     <directory>${project.main.resources}/META-INF</directory> 
     <outputDirectory>META-INF</outputDirectory> 
     <filtered>true</filtered> 
    </fileSet> 

(la propiedad 'project.main.resource' setted a 'src/main/resources' en mi caso)

+0

Puede usar los trazos 'para marcar cosas como' código 'en su respuesta, por ejemplo, el nombre del archivo sería más legible entonces. – noongiya95

Cuestiones relacionadas