使用Bamboo构建定义父POM的Subversion / Maven项目

时间:2012-09-06 23:24:29

标签: svn maven bamboo

我有一个复杂的项目结构,如下所示:

- root (no pom)
     - parent(parent pom.xml)
     + project A (pom.xml)
     + project B (pom.xml)
     - project C (pom.xml)
         - subproject 1 (pom.xml)
         - subproject 2 (pom.xml)
     + project N (pom.xml)

我需要使用Bamboo服务器构建subproject 2。我使用Bamboo来签出subproject 2代码,但当我运行mvn install时,它失败并显示“不可解析的父POM”消息。

当所有代码都在单个位置时,构建运行正常。我不想在root级别签出代码,因为有很多项目我不想查看(在我的例子中,项目是A,B,N和子项目1)

我试图为父项目,项目C / pom和子项目2检查代码3次,但代码被放在不同的目录中,彼此没有关系,所以没有太多的帮助

P.S。 我没有使用模块,虽然我确实尝试过使用模块,但没有任何区别。我没有发布实际的POM,因为这些非常简单,基本上孩子pom有parent元素,这就是所有关系。

所有上游项目都部署到本地和远程回购

3 个答案:

答案 0 :(得分:2)

mvn将在三个位置查找依赖项,在本地文件系统上的相对路径中,在本地计算机上的m2 repo中缓存,或在外部存储库中查找。如果你在Bamboo可以访问的repo上安装所有依赖项,那么你的构建可能会有效。

要测试这一点,在本地计算机上,您可以从根目录执行mvn安装(将所有依赖项放在计算机上的m2 repo中),然后在单独的目录中检出子项目2,然后安装子项目2吗?

如果可行,那么子项目2的依赖关系需要在竹子可以访问的maven仓库中。在使用bamboo进行mvn安装之前,使用类似artifactory的部署来部署它们。

答案 1 :(得分:1)

我们有一个非常相似的项目结构,我刚刚验证了我能够创建一个只检查subproject1的等效项并使用mvn -U clean install构建它的Jenkins作业。我没有访问Bamboo实例的权限,但Jenkins和Bamboo都只是在引擎盖下调用Maven,所以这里应该没有区别。

正如您所提到的,其他选项是检出整个存储库(或包含root和所有模块的目录)并在父POM上运行mvn -U clean install -pl subproject1 -am

为了帮助您,我们确实需要更多信息。您在其中一条评论中提到“所有[上游]依赖关系已经部署到了repo”。你的意思是你的本地存储库(即.m2 /存储库)?您应该仔细检查此目录是否包含所有父POM。您是否正在解析代理中的所有工件(即Artifactory / Nexus)?如果是这样,还要检查POM是否可用。

您当前的结构图未显示POM的位置。我假设您已正确设置它,但我已经看到人们将子模块放在奇怪的位置,这可能会导致问题。 relative locations of the POMs matter(除非您进行一些自定义)。你能在根上运行tree并清理输出,以便我们确切地知道你的POM彼此之间的关系吗?例如:

parentProject
|-- projectA
|   |-- pom.xml
|
|-- projectB
|   |-- pom.xml
|   |
|   |-- subProject1
|   |   |-- pom.xml
|   |    
|   |-- subProject2
|       |-- pom.xml
|
|-- pom.xml

最后,您是否可以导航到您尝试构建的子项目/模块并发布mvn help:effective-pom的输出?

答案 2 :(得分:0)

每个maven模块都应该是自包含的,使用相关链接来讨论../parent打破了这种设计。

尝试并通过GAV属性明确定义父项,然后确保这些poms在您的本地maven仓库中install,您将能够构建子项目。

我们运行15个模块构建3个级别,这是可能的。

你唯一的问题是当你碰到版本时,你将不得不开始安装根pom文件来提升分辨率过程。