2011-09-29 12 views
5

Tengo una pregunta sobre las propiedades en un proyecto de varios módulos.Las propiedades de Maven en el proyecto de varios módulos se restablecen al valor predeterminado

Considere el siguiente proyecto estrutura de 3 niveles:

project 
+- pom.xml (packaging: pom)  //referred to as super-pom 
+- module_group 
    +- pom.xml (packaging: pom)  //referred to as group-pom 
    +- module 
     +-pom.xml (packaging: jar) //referred to as module-pom 

En el super-pom defino una propiedad revisión que obtiene el valor por defecto "desconocido".

Además declaro y uso el buildnumber-maven-plugin que está configurado para obtener la revisión svn y ponerla en la propiedad revisión.

Siguiente Configuro el maven-jar-plugin para escribir esa propiedad en el manifiesto.

En th module-pom declaro el uso de buildnumber-maven-plugin para que se ejecute realmente.


Todo esto funciona cuando se construye el módulo directamente, es decir, se ejecuta el módulo-pom solamente. El manifiesto contiene la revisión que informa el buildnumber-maven-plugin tal como está impreso en la consola.

Sin embargo, si ejecuto la super-pom o grupo-Pom el valor predeterminado para revisión se escribe en el manifiesto, aunque el buildnumber-maven-plugin es ejecutado y se recupera la revisión correcta (se imprime a la consola antes ejecuciones maven-jar-plugin).

Tengo la sensación de que me falta algo en la herencia de la propiedad en proyectos de varios módulos.

¿Alguien tiene una idea de lo que podría estar mal aquí? ¿O alguien podría indicarme una descripción de cómo se manejan las propiedades en esos casos (desafortunadamente no logré encontrar una buena descripción aún)?

actualización

hice algunas investigaciones y unos pocos pruebas con resultados de depuración (-X opción) y de lo que he encontrado hasta ahora, supongo que mi problema es el siguiente:

1) Durante pom analizar las propiedades utilizadas en el pom se reemplazan por sus valores.

Considere esto pom parcial:

<!-- declare the property default value --> 
<properties> 
    <revision>default</revision> 
</properties> 

... 

<!-- use the property --> 
<someconfig>${revision}</someconfig> 

Después se evalúa la pom, parece resultar en un estado que correspondería a esto:

<properties> 
    <revision>default</revision> 
</properties> 

... 

<!-- The property seems to be "statically" replaced --> 
<someconfig>default</someconfig> 

2) El plugin que establece el real el valor de propiedad se ejecuta después, incluso si durante la fase validate.

Por lo tanto, la propiedad en sí está configurada correctamente en el nuevo valor, pero ya no se lee.

3) El plugin que utiliza <someconfig> (en mi caso sería el maven-jar-plugin) ahora funciona con <someconfig>default</someconfig> y por lo tanto no se lee revision en absoluto.

¿Alguien puede confirmar esto?

Respuesta

0

Solo puedo decir que declarar buildnumber-maven-plugin y maven-jar-plugin en un super-pom funciona bien para mí, sin importar si se trata de una compilación grupal o específica.

Aquí está una parte de esta super-pom (un padre para todos los proyectos):

 <!-- Generate build number --> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>buildnumber-maven-plugin</artifactId> 
      <version>1.0</version> 
      <executions> 
       <execution> 
        <phase>validate</phase> 
        <goals> 
         <goal>create</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <doCheck>false</doCheck> 
       <doUpdate>false</doUpdate> 
      </configuration> 
     </plugin> 
     <!-- Attach build number to all jars --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <archive> 
        <manifest> 
         <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
        </manifest> 
        <manifestEntries> 
         <Implementation-Build>${buildNumber}</Implementation-Build> 
         <Implementation-Build-Timestamp>${maven.build.timestamp}</Implementation-Build-Timestamp> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
Cuestiones relacionadas