Плагин Maven MOJO тормозит сборку при разрешении зависимости - PullRequest
0 голосов
/ 07 ноября 2019

Пример для воспроизведения: https://github.com/g4s8/example-plugin

Я пытаюсь создать плагин Maven, который работает с скомпилированными тестовыми классами. Прежде чем получить доступ к test-classes файлам, он должен разрешить путь к классам. Я наблюдал механизм разрешения пути к классам в surefire-maven-plugin источниках, но моя реализация проще (см. https://github.com/g4s8/example-plugin/blob/master/example-maven-plugin/src/main/java/wtf/g4s8/RunWithClasspathMojo.java#L43-L49):

// resolve all dependencies for current project
final Set<Artifact> artifacts = this.repos.resolve(
        new ArtifactResolutionRequest()
            .setArtifact(this.project.getArtifact())
            .setLocalRepository(this.lrep)
            .setRemoteRepositories(this.project.getRemoteArtifactRepositories())
            .setResolveTransitively(true)
).getArtifacts();

Этот плагин работает нормально, но после первого запуска он нарушает все последующие сборки проекта (см. example-project ): maven-jar-plugin завершается с ошибкой:

[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins: maven-jar-plugin: 3.0.2: jar (default-jar) в проекте example-project: вам нужно использовать классификатор для присоединения дополнительных артефактов к проекту вместо их замены. -> [Справка 1]

Если яотключите мой плагин с помощью -DskipTests или просто удалите код для разрешения зависимостей, целевой проект будет успешно построен.

Полагаю, ArtifactRepository.resolve как-то влияет на текущую сборку.

Что не так с этим кодоми как правильно разрешить зависимости классов для проекта Maven из плагина?

1 Ответ

2 голосов
/ 07 ноября 2019

В верхней строке Mojo (где вы также определяете фазу и т. Д.), Вам нужно установить @requiresDependencyResolution в test.

...