2013-04-24 45 views
1

在Maven插件中,我想通過ValueSource使用Interpolator內通常可用的所有屬性。Maven插件:將所有可用屬性傳遞給Interpolator

我可以使用MavenProject#getProperties(),MavenSession#getProperties()或MavenProject#getModel()#getProperties之一訪問在pom,系統屬性和環境變量屬性中定義的屬性。這工作得很好,代碼類似:

import org.codehaus.plexus.interpolation.PropertiesBasedValueSource; 

ValueSource valueSource = new PropertiesBasedValueSource(project.getModel() 
        .getProperties()) 

然而,像project.versionproject.build.directory標準的項目屬性都沒有任何這些屬性實例的一部分。我怎樣才能在屬性實例中一次獲得所有的人?

我的插件使用Maven 2.2.1或3.0.3在生成源代碼階段運行。

+0

我將在我的插件中定義一個參數,其默認值如* $ {project.version} *將由plexus容器處理。 – khmarbaise 2013-04-25 06:15:11

回答

1

回答我自己的問題:-):

我想通常通過在過濾器中可用的所有屬性。雖然我可以將每個屬性都設置爲插件的參數,但解決方案需要修改插件源代碼,並在新屬性添加到主題時重新編譯它。另外,mojo的源代碼會增長到很多行。

project.*屬性在過濾器中使用時實際上不是通過Project#getProperties方法可用的屬性。相反,它們直接映射到項目對象本身的getter方法。這樣做的課程是​​與PropertiesBasedValueSource相同的插值包。它會將每個getter方法(bean屬性)映射到一個屬性,並以一個定義的字符串作爲前綴,並遞歸地公開每個屬性的bean屬性。

import org.codehaus.plexus.interpolation.PrefixedObjectValueSource; 
    import org.codehaus.plexus.interpolation.PropertiesBasedValueSource; 

    ValueSource allProperties = new PropertiesBasedValueSource(getProject().getModel() 
        .getProperties()); 
    ValueSource projectProperties = 
       new PrefixedObjectValueSource("project.", getProject()));