我有一个Maven项目,其中一个子项目(A)想要依赖另一个使用"pom"包装的子项目(B).
如果我以直截了当的方式执行此操作,其中A指定对B的依赖<type>pom</type>,如果我执行"mvn install",则事情会完美运行,但如果我在安装之前运行任何阶段,例如mvn compile或mvn package,则在尝试构建A时失败:它在存储库中寻找B的pom,并没有找到它.
我真的不希望这个pom存储在存储库中,因为它是我们的活动源代码的一部分并经常更改.
对于我们构建的所有jar包装项目,似乎可以很好地将它们从存储库中移除,构建mvn package,并且Maven知道如何在源代码中找到所有依赖项并构建它管理的树而无需求助于存储库; 但是对于pom打包的项目,它总是想要去存储库.
我在尝试理解这一点时学到了几件事:
有没有办法可以将POM子项目指定为同一父项目中另一个子项目的依赖项,而无需将POM项目安装到存储库?
这不仅仅是一个 POM 项目的哪些目标与哪些生命周期阶段绑定的问题。如果是的话,那么绑定“package”目标就可以解决问题。
当构建多模块项目时,Maven会读取所有模块的POM来确定模块之间的依赖关系,以便它可以在依赖模块之前构建被依赖的模块。即使在运行“package”目标时(这样依赖的模块尚未在本地存储库中),它也能够实现这一点。
因此,为构建构建类路径的代码必须管理多种情况,特别是:
请注意与前两种情况相比,后两种情况的不对称性。
我可以看到解决你问题的两种方法。一种是提交错误报告,或者更确切地说,请求更改行为(因为这显然是故意的),也许仅适用于多模块项目的项目内依赖关系的情况。或者确实提出一个补丁。但由于这种行为是故意的,您可能会遭到拒绝。在最好的情况下,您会等待很长时间。(不过,我会投票支持你的错误报告——在不同的环境下,我也被同样的行为刺痛了。)
另一个解决方案就是在您的项目上运行安装。我真的不明白为什么你不想在你的存储库中使用 POM 项目:如果需要,你可以使用快照存储库,如果事情频繁变化也没关系,以避免污染你的主存储库。
| 归档时间: |
|
| 查看次数: |
1559 次 |
| 最近记录: |