2012-03-28 13 views
16

Tengo un archivo de propiedades con la siguienteMaven - Lectura de una propiedad de una propiedades externas archivo

junit.version=3.8.1 
dbcp.version=5.5.27 
oracle.jdbc.version=10.2.0.2.0 

intento leer las propiedades de mi archivo POM como se muestra a continuación

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>${junit.version}</version> 
    <scope>test</scope> 
</dependency> 


<dependency> 
    <groupId>dbcp</groupId> 
    <artifactId>dbcp</artifactId> 
    <version>${dbcp.version}</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>com.oracle</groupId> 
    <artifactId>ojdbc14</artifactId> 
    <version>${oracle.jdbc.version}</version> 
    <scope>provided</scope> 
</dependency> 

y la configuración del plugin

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>properties-maven-plugin</artifactId> 
     <executions> 
      <!-- Associate the read-project-properties goal with the initialize phase, to read the properties file. --> 
      <execution> 
      <phase>initialize</phase> 
      <goals> 
       <goal>read-project-properties</goal> 
      </goals> 
      <configuration> 
       <files> 
       <file>../live.properties</file> 
       </files> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

me parece que cuando corro mvn instalación limpia no encuentra las propiedades, sino que surge wi º los ​​siguientes errores:

'dependencies.dependency.version' for junit:junit:jar must be a valid version but is '${junit.version}'. @ line 23, column 16 
'dependencies.dependency.version' for dbcp:dbcp:jar must be a valid version but is '${dbcp.version}'. @ line 31, column 12 
'dependencies.dependency.version' for com.oracle:ojdbc14:jar must be a valid version but is '${oracle.jdbc.version}'. @ line 37, column 13 

Los fracasos anteriores parecen estar en situaciones en las que me refiero a la propiedad cuando yo declaro la dependencia. Descubrí que en otras situaciones, la propiedad se lee del archivo. Por ejemplo, funciona si utilizo una propiedad en la etiqueta de versión del proyecto (no en la versión de dependencia)

Parece que la propiedad no se lee del archivo si se hace referencia a ella desde la declaración de dependencia, pero se lee si se hace referencia desde cualquier otro lugar ¿Algunas ideas?

+0

¿Cuál es el punto de tener esas versiones en un archivo separado? – artbristol

+0

Estoy compartiendo ese archivo de propiedades con otro proyecto que crea una superposición de guerra usando las versiones. – ziggy

Respuesta

12

La fase initialize no es parte del clean lifecycle. También debe vincular su plugin de propiedades a la fase pre-clean.

Sin embargo, la resolución de la dependencia se ejecuta antes de resolver y ejecutar otros complementos, por lo que su enfoque no funcionará.

La forma correcta de manejar eso sería mover las versiones de dependencia a un pom.xml padre y usar el mismo pom padre en ambos proyectos.

+0

¿Qué fase debo usar para garantizar que se carguen las propiedades del comando mvn? – ziggy

+0

Ya respondí eso. El comando mvn clean utiliza un ciclo de vida diferido que tiene fases completamente diferentes del ciclo de vida predeterminado (por ejemplo, paquete mvn o instalación mvn). Por favor, siga el enlace a la documentación de mi respuesta. –

+0

¿Te refieres a algo como esto? pre-clean, initialize ziggy

1

u puede definir así:

<plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0-alpha-2</version> 
      <executions> 
       <execution> 
       <id>pre-clean-config</id> 
        <phase>pre-clean</phase> 
        <goals> 
         <goal>read-project-properties</goal> 
        </goals> 
        <configuration> 
         <files> 
          <file>config.properties</file> 
         </files> 
        </configuration> 
       </execution> 
       <execution> 
       <id>initialize-config</id> 
        <phase>initialize</phase> 
        <goals> 
         <goal>read-project-properties</goal> 
        </goals> 
        <configuration> 
         <files> 
          <file>config.properties</file> 
         </files> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
Cuestiones relacionadas