2010-04-18 10 views
8

Je souhaite extraire toutes les propriétés de mon fichier pom.xml dans un fichier de propriétés. Ce sont les propriétés communes comme dependency-versions, plugin-versions et répertoires. J'utilise les propriétés-maven-plugin, mais ça ne fonctionne pas comme je le veux.properties-maven-plugin: Erreur lors du chargement du fichier de propriétés

La partie essentielle de mon 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> 

Maintenant, quand je cours "propriétés mvn: lecture-projet propriétés" je reçois l'erreur suivante:

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

Le pom. Le fichier properties est situé dans le même répertoire que pom.xml. Que puis-je faire pour que les propriétés-maven-plugin lisent mon fichier de propriétés?

EDIT

J'ai déposé une question à http://jira.codehaus.org/browse/MOJO-1523. Il a été fermé comme « pas un bug », la raison est:

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.

Répondre

0

EDIT2

Voir here pour une solution de contournement en utilisant tâches Ant, ce qui rend cette utilisation possible cas

5

Votre élément configuration est défini à l'intérieur d'un execution et applique donc à ce execution seulement.

Donc, soit l'appel mvn initialize (ou postérieure de phase initialize) pour utiliser le configuration de votre execution actuelle obligatoire.

Ou utiliser un global 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> 

Et puis appelez

mvn properties:read-project-properties 

Mais ce ne serait pas beaucoup de sens dans le cas particulier de ce plugin (vous voulez que les propriétés soient disponibles pendant la construction) donc cela vous laisse avec la première solution.


Mise à jour: Je l'ai fait un test de mon côté et, en fait, avec le POM suivant:

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

Courir mvn test ne fonctionnera pas: Maven essayera de télécharger junit:jar:${junit.version} (il n'utilise pas la valeur de la propriété) et cela échouera évidemment.

 
$ 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 partie impaire est que le téléchargement de la dépendance se produit après properties:read-project-properties. Je ne suis pas sûr mais cela ressemble à un bug, vous devriez ouvrir an issue.

+0

Merci beaucoup, bon indice! L'erreur est partie. Mais ce que je veux faire ne marche toujours pas: les propriétés de mon fichier pom.xml ne sont pas remplacées par celles de mon fichier-prop. Par exemple. quand j'appelle "propriétés de mvn: essai de propriétés de lecture-projet" j'obtiens des erreurs comme "manquant: ---------- 1) junit: junit: jar: $ {junit.version}" Dois-je exécuter un autre objectif spécifique pour que maven insère correctement les propriétés à "runtime"? – ifischer

+1

Merci pour vos conseils. Juste déposé un problème. Comme il semble, je suis le seul qui a besoin d'une telle "fonctionnalité";) – ifischer

3

Essayez d'utiliser la validation de phase au lieu de initialiser 3.x Maven (link).

-1

Je rencontre votre question, mais j'ai essayé d'ajouter cette ressource ici, cela fonctionne 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