2010-04-18 19 views
8

Quiero extraer todas las propiedades de mi pom.xml en un archivo de propiedades. Estas son las propiedades comunes, como las versiones de dependencia, las versiones de los complementos y los directorios. Estoy usando propiedades-maven-plugin, pero no funciona como yo quiero.properties-maven-plugin: Error al cargar propiedades-archivo

La parte esencial de mi pom.xml:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0-alpha-1</version> 
    <executions> 
    <execution> 
     <phase>initialize</phase> 
     <goals> 
     <goal>read-project-properties</goal> 
     </goals> 
     <configuration> 
     <files> 
      <file>${basedir}/pom.properties</file> 
     </files> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Ahora cuando corro "propiedades MVN: lectura del proyecto-properties" me sale el siguiente error:

[INFO] One or more required plugin parameters are invalid/missing for 'properties:read-project-properties' 

[0] Inside the definition for plugin 'properties-maven-plugin' specify the following: 

<configuration> 
    ... 
    <files>VALUE</files> 
</configuration>. 

El pom. El archivo de propiedades se encuentra en el mismo directorio que el pom.xml. ¿Qué puedo hacer para permitir que las propiedades-maven-plugin lean mi archivo de propiedades?

EDITAR

me presentó un problema en http://jira.codehaus.org/browse/MOJO-1523. Se ha cerrado como "no es un error", la razón es:

It's by design. The project definition has to be self-contained, otherwise it is no longer complete if it is refered from elsewhere as part of the transitive deps.

Respuesta

0

Edit2

Ver here para una solución usando las tareas Ant, lo que hace posible este caso de uso

5

Su elemento configuration se define dentro de un execution y por lo tanto se aplica sólo a este execution.

Así que, o llamada mvn initialize (o una posterior fase de initialize) para utilizar el configuration de su actual execution vinculante.

O utilizar un mundial configuration:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0-alpha-2</version> 
    <configuration> 
    <files> 
     <file>etc/config/dev.properties</file> 
     </files> 
    </configuration> 
    ... 
    </plugin> 

y luego llamar

mvn properties:read-project-properties 

Pero eso no tiene mucho sentido en el caso particular de este plugin (que quieren que las propiedades estén disponibles durante la compilación) por lo que esto te deja con la primera solución.


Actualización: Hice una prueba de mi lado y, de hecho, con la siguiente POM:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.stackoverflow</groupId> 
    <artifactId>Q2664362</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>properties-maven-plugin</artifactId> 
     <version>1.0-alpha-2</version> 
     <executions> 
      <execution> 
      <phase>initialize</phase> 
      <goals> 
       <goal>read-project-properties</goal> 
      </goals> 
      <configuration> 
       <files> 
       <file>etc/config/dev.properties</file> 
       </files> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${junit.version}</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</project> 

Correr mvn test no funcionará: experto intentará descargar junit:jar:${junit.version} (es decir, no usa el valor de la propiedad) y esto obviamente fallará.

 
$ mvn test 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building SO - Q2664362 - maven-properties-plugin demo 
[INFO] task-segment: [test] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [properties:read-project-properties {execution: default}] 
[INFO] [resources:resources {execution: default-resources}] 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory /home/pascal/Projects/stackoverflow/Q2664362/src/main/resources 
Downloading: http://repo1.maven.org/maven2/junit/junit/${junit.version}/junit-${junit.version}.pom 
[INFO] Unable to find resource 'junit:junit:pom:${junit.version}' in repository central (http://repo1.maven.org/maven2) 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] Nothing to compile - all classes are up to date 
[INFO] [resources:testResources {execution: default-testResources}] 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory /home/pascal/Projects/stackoverflow/Q2664362/src/test/resources 
Downloading: http://repo1.maven.org/maven2/junit/junit/${junit.version}/junit-${junit.version}.jar 
[INFO] Unable to find resource 'junit:junit:jar:${junit.version}' in repository central (http://repo1.maven.org/maven2) 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Failed to resolve artifact. 
... 

La parte extraña es que la descarga de la dependencia se produce después de properties:read-project-properties. No estoy seguro, pero esto suena como un error, debe abrir an issue.

+0

Muchas gracias, buena pista! El error se fue. Pero lo que quiero hacer todavía no funciona: las propiedades en mi pom.xml no son reemplazadas por las de mi archivo prop. P.ej. cuando llamo "propiedades mvn: prueba de lectura-propiedades-prueba" recibo errores como "Falta: ---------- 1) junit: junit: jar: $ {junit.version}" ¿Debo ejecutar cualquier otro objetivo específico para que maven inserte correctamente las propiedades en "runtime"? – ifischer

+1

Gracias por sus consejos. Solo archivé un problema. Como parece, soy el único que necesita esa "característica";) – ifischer

3

Trate de usar validar fase en lugar de inicializar para 3.x experto (link).

-1

Me surge su pregunta, pero traté de agregar estos recursos aquí, funciona bien.

<build> 
    <resources> 
     <resource> 
      <directory>src/config</directory> //your config folder 
      <filtering>true</filtering> 
     </resource> 
    </resources> 

    <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0-alpha-2</version> 
      <executions> 
       <execution> 
       <phase>initialize</phase> 
       <goals> 
        <goal>read-project-properties</goal> 
       </goals> 
       <configuration> 
        <files> 
        <file>src/config/config.properties</file> //your config file 
        </files> 
       </configuration> 
       </execution> 
      </executions> 
      </plugin> 
    </build> 
Hope you resolve this as above 
Cuestiones relacionadas