2013-02-07 5 views
6

Ich entwickle ein benutzerdefiniertes Maven-Plugin. Wenn ich schreibe:Zugriff auf Maven Pom-Variablen aus der Datei "Eigenschaften"

${project.version} 

in meine pom-Datei kann ich seinen Wert erhalten aber ist es eine Möglichkeit, wenn ich in eine Eigenschaften schreiben Datei:

project.version = ${project.version} 

, die korrekt den project.version Wert gesetzt wird, Wie kann ich es bei meinem Java-Code implementieren?

PS: Ich verwende keine Anmerkungen in meinem Mojo und ich möchte keine Variablen in meinem Java-Code verwenden, da der Benutzer meine Variablen wie in einer Eigenschaftendatei definieren soll und ich meinen Kern-Java nicht ändern kann Code, um Dinge zu ändern.

Antwort

6

Sie Maven resource filtering<resources> innerhalb <build> durch einfaches Hinzufügen verwenden können und filtere alles, was du willst.

+0

Genau das, was ich will, danke. – kamaci

0

in Ihrem mojo wenn mit Anmerkungen siehe http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html Verwendung

@Component 
protected MavenProject project; 

mit doclet

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

dann project.getVersion()

+0

Es bedeutet, dass ich eine neue Variable für jeden neuen Eintrag in der Eigenschaftendatei definieren sollte. Für eine Pom-Datei ersetzt Maven diese Ausdrücke, und ich möchte diesen Job in meinem Plugin ausführen und aus einer Eigenschaftendatei lesen und den Wert von Ausdruck abrufen, oder ich möchte ihn maven, um den Wert eines Ausdrucks zu erhalten (ohne einen anderen zu verwenden) Plugin, weil ich mine) in einer Eigenschaftendatei entwickeln? – kamaci

+0

Das war der Weg, um MavenProject in ein Maven-Plugin zu bekommen. Wenn Sie eine Filterung für Dateien wie das Ressourcen-Plugin durchführen wollen, müssen Sie sich die Komponente http://maven.apache.org/shared/maven-filtering/ ansehen. –

+0

Gibt es ein Beispiel, wie man es benutzt? – kamaci

0

Sie können jede Eigenschaft in Ihrem pom.xml lesen und speichern, wie ich in dieser Funktion tun:

/** 
* 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"); 
    } 
} 

Um den clases nicht nativ in der JVM in der Lage verwenden Sie diese Abhängigkeiten hinzufügen sollen:

<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