【问题标题】:mvn dependency plugin requires jars to be installed?mvn 依赖插件需要安装 jars 吗?
【发布时间】:2024-01-18 03:43:02
【问题描述】:

在多模块项目中运行 mvn dependency:copy-dependencies 时,似乎 mvn 期望 jar 已安装在 .m2/repo 中。也许我错过了一些东西,但我无法弄清楚其中的意义......
这个问题有点类似于Maven: Why does it need dependency modules' .jars for `mvn initialize`?,但它更具体到依赖插件(我猜......)并且提到的问题没有一个好的答案,至少没有一个对我有帮助......

我有一个多模型项目,其中 modA 依赖于 modB
现在我想跑

mvn dependency:copy-dependencies -am -pl modA

这应该复制 modA 的所有依赖项及其依赖的所有模块,例如 modB 的依赖项

问题是如果 .m2/repo 不包含 modB 的 jar 则插件失败...为什么?
有趣的是,如果我只是在 .m2/repo/ 的适当位置创建一个空的“jar”文件,插件就足以成功,所以这只是证明我它甚至不查看 jar 的内容,但是它仍然需要它就位。 WTF?...

第一个问题 - 为什么?
第二个问题 - 我如何绕过这个问题而不必真正生成罐子或“触摸”它们? (我有很多,不实用……)

更新:天哪,我刚刚意识到我忘了添加一个有价值的部分......我不想复制 modB 所以我实际上从命令中排除了它的工件 ID,所以它实际上是:

mvn dependency:copy-dependencies -am -pl modA -DexcludeGroupIds=mod.b.group.id

我什至尝试过:

mvn dependency:copy-dependencies -am -pl modA -DexcludeArtifactIds=modB

因此,如果我没有这样做,那么插件将在 repo 中查找 modB 完全有道理,但是由于 modB 被排除在外,所以我希望插件不需要 modB.jar 存在。
哦,好吧,也许这个问题只需要一个错误报告......

【问题讨论】:

    标签: maven maven-plugin maven-dependency-plugin


    【解决方案1】:

    为什么?我猜这就是命令应该做的事情 - 复制依赖项,如果它们不存在则失败。该插件不关心工件的完整性。

    为选定的组/项目绕过此问题的一种方法是使用插件的excludeGroupIdsexcludeArtifactIds 参数。

    【讨论】:

    • 很抱歉,我忘了添加最有价值的部分...看看我在问题中的更新。我实际上是故意从复制命令中排除了 modB,但它没有按预期工作。