2013-02-07 57 views
6

我正在開發一個自定義maven插件。當我寫:從屬性文件訪問Maven Pom變量

${project.version} 

到我的POM文件,我可以得到它的價值卻是有辦法,如果我寫到一個屬性文件:

project.version = ${project.version} 

,將正確設置project.version值,我怎樣才能在我的Java代碼中實現它?

PS:我不在我的Mojo中使用註釋,也不想在我的Java代碼中使用變量,因爲用戶應該在屬性文件中將其定義爲我的變量,並且我無法更改我的核心Java代碼以改變事物。

回答

0
你的魔力中

如果使用註釋看到http://maven.apache.org/plugin-tools/maven-plugin-plugin/examples/using-annotations.html 使用

@Component 
protected MavenProject project; 

用的doclet

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

然後project.getVersion()

+0

這意味着我應該爲屬性文件中的每個新條目定義一個新變量。對於一個pom文件,maven替換了這個表達式,我想在我的插件中執行這個工作,並從屬性文件中讀取並獲取表達式的值,或者我讓它向我提供表達式的值(不使用任何其他表達式插件,因爲我正在開發我的)在屬性文件? – kamaci

+0

這是在maven插件中獲取MavenProject的方法。如果你想對資源插件等文件做一些過濾,你必須看看組件http://maven.apache.org/shared/maven-filtering/ –

+0

有沒有一個例子如何使用它? – kamaci

0

您可以讀取和保存任何財產在pom.xml,因爲我在這個函數做:

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

爲了能夠使用在JVM沒有原生的clases你應該添加這些依賴關係:

<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