1

私は、プロジェクトの推移的な依存関係である 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 内の各ファイルに対して ...」を表現するより良い方法はありますか?

4

0 に答える 0