一部の Maven のデフォルト機能を独自の実装に置き換える必要があり、それを行うクリーンな方法を探しています。
org.apache.maven.repository.internal.DefaultVersionRangeResolver
次のように、component.xml を使用して拡張コンポーネントを拡張および登録しました。
<component-set>
<components>
<component>
<role>org.sonatype.aether.impl.VersionRangeResolver</role>
<role-hint>default</role-hint>
<implementation>com.my.custom.VersionRangeResolver
</implementation>
<isolated-realm>false</isolated-realm>
<requirements>
<requirement>
<role>org.sonatype.aether.spi.log.Logger</role>
<role-hint />
<field-name>logger</field-name>
</requirement>
<requirement>
<role>org.sonatype.aether.spi.log.Logger</role>
<role-hint />
<field-name>logger2</field-name>
</requirement>
<requirement>
<role>org.sonatype.aether.impl.MetadataResolver</role>
<role-hint />
<field-name>metadataResolver</field-name>
</requirement>
</requirements>
</component>
</components>
</component-set>
これを含むプロジェクトをローカル リポジトリにインストールし、別のプロジェクトの pom.xml で次のように参照します。
<build>
<extensions>
<extension>
<groupId>my.groupId</groupId>
<artifactId>maven-version-resolver</artifactId>
<version>SNAPSHOT</version>
</extension>
</extensions>
</build>
ただし、私のアーティファクトは使用されません。ビルド内でこの小さな GMaven groovy スクリプトを実行すると、次のようになります。
session.container.getComponentDescriptorList(
'org.sonatype.aether.impl.VersionRangeResolver'
).each{
println "Role Hint: ${it.roleHint}, implementation: ${it.implementation}" ;
}
デフォルトの実装と私自身の実装の両方が表示され、ヒントは「デフォルト」です。では、どうすればこれを解決できますか?
- components.xml に追加のパラメーターを設定する必要がありますか (おそらく優先度が高くなります)?
- コンポーネントを Maven プラグインとして記述し、コンポーネントをプログラムで積極的に登録する必要がありますか?
- これをカバーするPlexusのドキュメントはありますか?