1

Maven プラグインでは、通常、ValueSource を介して Interpolator 内の pom で使用できるすべてのプロパティを使用したいと考えています。

MavenProject#getProperties()、MavenSession#getProperties()、または MavenProject#getModel()#getProperties のいずれかを使用して、pom 内で定義されたプロパティ、システム プロパティ、および環境変数プロパティにアクセスできます。これは、次のようなコードでうまく機能します。

import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;

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

ただし、標準のプロジェクト プロパティは、それらの Properties インスタンスのようなものであるproject.versionproject.build.directory、その一部ではありません。プロパティインスタンスでそれらすべてを一度に取得するにはどうすればよいですか?

私のプラグインは、Maven 2.2.1 または 3.0.3 を使用して、generate-sources フェーズで実行されます。

4

1 に答える 1

2

私自身の質問への回答:-):

フィルターで通常使用できるすべてのプロパティを渡したいです。プラグインのパラメーターとして使用可能なすべてのプロパティを設定できますが、その解決策ではプラグインのソース コードを変更し、新しいプロパティが追加されるたびに再コンパイルする必要があります。また、mojo のソース コードは膨大な行数になります。

プロパティは、フィルターで使用される場合project.*、メソッドを通じて実際に使用できるプロパティではありません。Project#getProperties代わりに、プロジェクト オブジェクト自体の getter メソッドに直接マップされます。それを行うクラスはPrefixedObjectValueSource、 と同じ補間パッケージにありますPropertiesBasedValueSource。各ゲッター メソッド (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 に答える