Пример для воспроизведения: 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 из плагина?