我正在编写一个需要查看作为项目传递依赖项的 jar的EnforcerRule
for 。maven-enforcer-plugin
在下面的代码中,我得到了我需要的点点滴滴,然后得到了所有的依赖项,并且对于每个带有 Packaging=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 checker 执行以下操作
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
运行时为空。mvn package
有什么方法可以指定规则应该运行后依赖项收集和解析@Mojo(requireDependencyCollection=Scope.COMPILE, requireDependencyResolution=Scope.COMPILE)
吗?
有没有更好的方法来表达,在一个强制规则中,“对于每个依赖 jar 中的每个文件,......”?