Плагин Maven 3: список зависимостей проекта - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь создать плагин maven 3, который должен анализировать каждую зависимость и транзитивную зависимость проекта и перечислять артефакты, предпочтительно со ссылкой на файл jar в локальном репозитории maven. У меня не так много удачи.

Я должен потом обработать зависимости, чтобы плагины для зависимостей и деревьев на самом деле не подходили мне. Мне нужно создать собственный плагин, который может работать с артефактами зависимости.

Я попытался создать плагин, используя DependencyGraphBuilder, но безуспешно:

@Parameter(defaultValue = "${project.build.directory}", property = "outputDir", required = true)
private File outputDirectory;

@Parameter(defaultValue = "${project}", readonly = true, required = true)
private MavenProject project;

@Parameter(defaultValue = "${session}", readonly = true, required = true)
private MavenSession session;

@Component(hint = "maven3")
private DependencyGraphBuilder dependencyGraphBuilder;

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
    File targetDir = outputDirectory;

    if (!targetDir.exists()) {
        targetDir.mkdirs();
    }

    ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
    buildingRequest.setProject(project);
    try {
        try (PrintWriter writer = new PrintWriter(new File(outputDirectory, "output"))) {
            writer.println("I did shit");
        }

        DependencyNode depenGraphRootNode = dependencyGraphBuilder.buildDependencyGraph(buildingRequest, null);
        CollectingDependencyNodeVisitor visitor = new CollectingDependencyNodeVisitor();
        depenGraphRootNode.accept(visitor);
        List<DependencyNode> children = visitor.getNodes();
        for (DependencyNode node : children) {
            System.out.println(node.getArtifact().getGroupId() + " " + node.getArtifact().getArtifactId());
            try (PrintWriter writer = new PrintWriter(new File(outputDirectory, "output"))) {
                writer.println(node.getArtifact().getGroupId() + " " + node.getArtifact().getArtifactId());
            }
        }
    } catch (Exception ex) {

    }
}

Я получил несколько разных исключений, в зависимости от версий зависимостей в моем pom, например

java.lang.NoSuchMethodError: org.apache.maven.artifact.versioning.DefaultArtifactVersion.compareTo (Lorg / apache / maven / artifact / versioning / ArtifactVersion;) I

и

java.lang.NoClassDefFoundError: org / eclipse / aether / RepositorySystemSession

Может кто-нибудь предоставить мне рабочую настройку зависимостей для работы DependencyGraphBuilder или, альтернативно, другой способ анализа зависимостей компилируемых проектов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...