2013-02-07 13 views
6

Sto sviluppando un plug-in personalizzato per i maven. Quando scrivo:Accesso alle variabili Maven Pom dal file delle proprietà

${project.version} 

nel mio file pom posso ottenere il suo valore però c'è un modo se scrivo in un file delle proprietà:

project.version = ${project.version} 

che imposterà correttamente il valore project.version, come posso implementarlo con il mio codice Java?

PS: Non uso annotazioni sul mio Mojo e non voglio usare variabili sul mio codice Java perché l'utente dovrebbe definire come variabili come in un file di proprietà e non posso cambiare il mio core Java codice per cambiare le cose.

risposta

6

È possibile utilizzare Maven resource filtering semplicemente aggiungendo <resources> all'interno <build> e attivando il filtro per tutto ciò che vuoi.

+0

Esattamente quello che voglio, grazie. – kamaci

0

all'interno del vostro mojo se utilizzano annotazioni vedono http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html uso

@Component 
protected MavenProject project; 

con doclet

/** 
* The Maven project to act upon. 
* 
* @parameter expression="${project}" 
* @required 
*/ 
private MavenProject project; 

poi project.getVersion()

+0

Significa che dovrei definire una nuova variabile per ogni nuova voce nel file delle proprietà. Per un file Maven sostituisce quelle espressioni e voglio fare quel lavoro sul mio plugin e leggere da un file delle proprietà e ottenere il valore di espressione o I wamt per lasciare che sia il maven a prendermi il valore di un'espressione (senza usare nessun altro plugin perché sto sviluppando il mio) in un file di proprietà? – kamaci

+0

Questo era il modo per ottenere MavenProject in un plug-in maven. Se vuoi fare un po 'di filtraggio su file come il plugin delle risorse, devi dare un'occhiata al componente http://maven.apache.org/shared/maven-filtering/ –

+0

c'è un esempio su come usarlo? – kamaci

0

Si può leggere e salvare qualsiasi proprietà in pom.xml come faccio in questa funzione:

/** 
* Save a property in a pom.xml 
* 
* @param propertyName Name of the property 
* @param value New value for the property 
*/ 
public static void saveProjectProperty(String propertyName, String value) 
{ 
    Model model = null; 
    FileReader reader = null; 
    MavenXpp3Reader mavenreader = new MavenXpp3Reader(); 
    try 
    { 
     reader = new FileReader("pom.xml"); 
     model = mavenreader.read(reader); 
     MavenProject project = new MavenProject(model); 
     while (project.getParent() != null) 
     { 
      project = project.getParent(); 
     } 
     project.getProperties().put(propertyName, value); 
     try (FileWriter fileWriter = new FileWriter("pom.xml")) 
     { 
      project.writeModel(fileWriter); 
     } 
    } 
    catch (IOException ex) 
    { 
     LOG.severe("Error saving pom.xml"); 
    } 
    catch (XmlPullParserException ex) 
    { 
     LOG.warning("Error reading pom.xml"); 
    } 
} 

Per poter utilizzare i clases non nativi nella JVM si dovrebbe aggiungere queste dipendenze:

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-model</artifactId> 
    <version>2.0</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-project</artifactId> 
    <version>2.0</version> 
</dependency 
Problemi correlati