我有一个Maven项目,其中一个子项目(A)想要依赖另一个使用“pom”包装的子项目(B)。为什么maven识别只有安装的POM文件的依赖关系?
如果我这样做了简单的方法,其中A指定与<type>pom</type>
对B存在依赖关系,事情很好地工作,如果我做“MVN安装”,但如果我运行任何阶段早于安装,如mvn compile
或mvn package
,然后它尝试构建A失败:它会在存储库中查找B的POM,并且找不到它。
我真的不想在存储库中使用这个pom,因为它是我们活动源代码的一部分,并且经常更改。
对于我们构建的所有jar打包项目,它似乎很好地将它们保存在存储库之外,使用mvn package
构建,Maven知道如何在源代码中找到所有依赖项并构建它所管理的树,而无需执行到存储库;但是对于pom打包的项目,它总是希望访问存储库。
一对夫妇的事情,我学会了在试图理解这一点:
- Maven的最佳做法,鼓励你use pom-packaged projects to group dependencies,但随着加踩POM项目“MVN安装”
- Maven lifecycle documentation说:“一个纯粹是元数据的项目(包装价值是pom)只将目标绑定到安装和部署阶段“;也许这就是为什么POM项目作为依赖目标不可见的原因,除非我调用安装阶段?我尝试将编译器插件绑定到编译阶段,这似乎没有帮助。
有没有一种方法可以将POM子项目指定为同一父项目中另一个子项目的依赖项,而无需将POM项目安装到存储库?
感谢您确认不对称性。我结束了第二个建议,如[我的答案](http://stackoverflow.com/questions/5877317/why-does-maven-recognize-dependencies-on-only-installed-pom-files/5877982#5877982 )。这并不是我反对将POM项目放入存储库,我只是不想要所有开发人员必须遵循的额外先决条件步骤。所以我很高兴如果我可以用“mvn package”构建整个项目,即使有些东西最终会在版本库中作为副作用。但我不想告诉人们先去其他地方运行“mvn install”。 – metamatt 2011-05-04 21:51:45