Mojo 开发 - 处理多模块项目中未解决的依赖关系

Posted

技术标签:

【中文标题】Mojo 开发 - 处理多模块项目中未解决的依赖关系【英文标题】:Mojo development - Handling unresolved dependencies in multi module projects 【发布时间】:2013-02-19 05:16:13 【问题描述】:

我有一个用 @requiresDependencyResolution 测试注释的 mojo。

它适用于具有单层嵌套的多模块项目,但用户报告了如下结构的问题。

 -- my_project
    |
    -- pom.xml
    -- submodule1
       |
       -- pom.xml
    -- submodule2
       |
       -- pom.xml
       -- submodule21
         |
         -- pom.xml
       -- submodule22
         |
         -- pom.xml

如果 submodule21 依赖于 submodule1 maven 报告

未能在项目 submodule21 上执行目标:无法解析 项目 org.my:submodule21:jar:1.0-SNAPSHOT 的依赖项:可以 找不到工件 org.my:submodule1:jar:1.0-SNAPSHOT

删除 requiresDependencyResolution=test 注释可防止此问题,但我无法访问运行 mojo 所需的信息。

从 github 上的 surefire 代码的简要扫描来看,它看起来也使用 requiresDependencyResolution=test 但能够毫无问题地针对该项目运行。

https://github.com/apache/maven-surefire/blob/master/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java

https://github.com/apache/maven-surefire/blob/master/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java

与我自己的代码唯一明显的区别是它使用 java 注释而不是旧式 javadoc 注释。

万无一失的魔力是如何做到这一点的?

我的代码是

http://code.google.com/p/pitestrunner/source/browse/pitest-maven/src/main/java/org/pitest/maven/PitMojo.java

示例项目显示问题

http://code.google.com/p/pitestrunner/issues/detail?id=71

【问题讨论】:

基于错误消息,我会假设此多模块构建中的依赖项不正确,因为如果依赖项正确,则构建应该可以正常工作,而无需通过 mvn 安装 这是我的第一个想法-但该错误仅发生在我自己的插件上,而不是万无一失。如果项目在某种程度上设置不正确,我希望两个插件都显示相同的错误。 您是否阅读了@requiresDependencyCollection 的描述?也许你在处理链中太早了,实际上依赖项还没有放到类路径中? 您是否清理了本地存储库并尝试在没有插件的情况下从头开始构建项目? @khmarbaise 感谢您的建议,但事实并非如此 - 只是添加了一个描述如何解决此问题的答案。 【参考方案1】:

为了其他遇到此问题的人的利益 - 我最终解决了这个问题。插件没有问题。

surefire 和我自己的插件之间的区别只是它们的运行方式。 Surefire 被绑定到测试阶段,我自己的插件是通过直接调用目标来运行的。当我将我的插件绑定到验证阶段时,一切都解决了。

【讨论】:

以上是关于Mojo 开发 - 处理多模块项目中未解决的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章

如何列出 React 项目中未使用的节点模块/依赖项?

在 Kotlin MultiPlatform 项目中未解决 iOS 依赖项

MavenMaven之使用maven快照版本机制进行多项目依赖开发

node本地项目发生依赖包因更新而不兼容导致项目启动错误解决记录

如何解决多模块项目中模块之间的依赖关系?

maven(多模块和继承)