2012-03-28 15 views
16

Ho un file di proprietà con il seguenteMaven - La lettura di un immobile da una proprietà esterne File

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

provo a leggere quegli oggetti di mio file pom come illustrato di seguito

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

e la configurazione 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> 

trovo che quando ho eseguito mvn nuova installazione non trova le proprietà, invece si arriva wi th i seguenti errori:

'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 

I fallimenti sopra appaiono in situazioni in cui i riferimento alla proprietà quando dichiaro la dipendenza. Ho trovato che in alcune altre situazioni la proprietà viene letta dal file. Ad esempio funziona se uso una proprietà sul tag di versione del progetto (non la versione di dipendenza)

Sembra che la proprietà non venga letta dal file se viene richiamata dalla dichiarazione di dipendenza ma viene letta se riferita a da qualsiasi altra parte. Qualche idea?

+0

Qual è il punto di avere quelle versioni in un file separato? – artbristol

+0

Sto condividendo quel file di proprietà con un altro progetto che crea un overlay di guerra usando le versioni. – ziggy

risposta

12

La fase initialize non fa parte di clean lifecycle. È inoltre necessario associare il plug-in proprietà alla fase pre-clean.

Tuttavia, la risoluzione delle dipendenze viene eseguita prima di risolvere ed eseguire altri plug-in, pertanto l'approccio non funzionerà.

Il modo corretto per gestirlo sarebbe spostare le versioni di dipendenza in un padre pom.xml e utilizzare lo stesso padre in entrambi i progetti.

+0

Quale fase dovrei utilizzare per garantire che le proprietà vengano caricate rispetto al comando mvn? – ziggy

+0

Ho già risposto. Il comando mvn clean utilizza un ciclo di vita diverso che ha fasi completamente diverse rispetto al ciclo di vita predefinito (ad esempio, pacchetto mvn o installazione mvn). Si prega di seguire il link alla documentazione dalla mia risposta. –

+0

Intendi qualcosa del genere? pre-clean, initialize ziggy

1

u può definire in questo modo:

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