1

在 Maven 插件中,我想通过 ValueSource 使用通常可用于插值器内的 pom 的所有属性。

我可以使用 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不属于任何这些 Properties 实例。如何在属性实例中一次获得所有这些?

我的插件使用 Maven 2.2.1 或 3.0.3 在生成源阶段运行。

4

1 回答 1

2

回答我自己的问题:-):

我想传递过滤器中通常可用的所有属性。虽然我可以将每个可用的属性设置为我的插件的参数,但该解决方案需要修改插件源代码并在向 maven 添加新属性时重新编译它。此外,mojo 的源代码会增长到很多行。

在过滤器中使用时,这些project.*属性实际上并不是通过该方法可用的属性。Project#getProperties相反,它们直接映射到项目对象本身的 getter 方法。这样做的类PrefixedObjectValueSourcePropertiesBasedValueSource. 它将每个 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() ) );
于 2013-05-03T09:03:08.647 回答