要复制的示例: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
失败,并出现错误:
[错误]无法在项目example-project上执行目标org.apache.maven.plugins:maven-jar-plugin:3.0.2:jar(默认jar):您必须使用分类器来附加补充工件而不是替换它们。 -> [帮助1]
如果我使用-DskipTests
禁用插件或只是删除了
解决依赖关系的代码,目标项目将成功构建。
我想ArtifactRepository.resolve
会以某种方式影响当前的版本。
这段代码有什么问题,以及如何正确地从插件中解析Maven项目的依赖类路径?