私は、プロジェクトの推移的な依存関係である jar を調べる必要があるものを書いEnforcerRule
ています。maven-enforcer-plugin
以下のコードでは、必要な部分を取得してから、すべての依存関係を取得し、packages=jar を使用してそれぞれについていくつかの作業を行います。
public void execute(EnforcerRuleHelper helper) throws EnforcerRuleException {
... // Configuration wrangling
Log log = helper.getLog();
MavenProject project;
try {
project = (MavenProject) helper.evaluate("${project}");
} catch (ExpressionEvaluationException ex) {
throw new EnforcerRuleException(
"Project unavailable " + ex.getLocalizedMessage(), ex);
}
ArtifactResolver resolver;
try {
resolver = (ArtifactResolver)
helper.getComponent(ArtifactResolver.class);
} catch (ComponentLookupException ex) {
throw new EnforcerRuleException(
"Component unavailable " + ex.getLocalizedMessage(), ex);
}
@SuppressWarnings("unchecked")
ImmutableSet<Artifact> allArtifacts = ImmutableSet.<Artifact>builder()
.add(project.getArtifact())
.addAll(project.getArtifacts())
.build();
JarChecker jarChecker = new JarChecker(log, p, resolver);
for (Artifact art : allArtifacts) {
String artType = art.getType();
if ("jar".equals(artType)) {
try {
jarChecker.checkJar(art);
} catch (IOException ex) {
...
}
}
}
...
}
私のjarチェッカーは次のことを行います
File f = art.getFile();
if (f == null) {
throw new EnforcerRuleException(
"Cannot check artifact " + artToString(art)
+ " since it has not been packaged.");
}
// Do stuff with f.
残念ながら、テスト プロジェクトでf
実行すると null になります。mvn package
依存関係の収集と解決後にルールを実行するように指定する方法はあります@Mojo(requireDependencyCollection=Scope.COMPILE, requireDependencyResolution=Scope.COMPILE)
か?
エンフォーサ ルールで、「各依存先 jar 内の各ファイルに対して ...」を表現するより良い方法はありますか?