1

我正在编写一个需要查看作为项目传递依赖项的 jar的EnforcerRulefor 。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 中的每个文件,......”?

4

0 回答 0