2012-09-06 44 views
2

我有一个复杂的项目结构是这样的:用竹片搭建的Subversion/Maven项目定义父POM(S)

- 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) 

我需要用竹服务器建立subproject 2。我使用Bamboo来结算subproject 2代码,但是当我运行mvn install时,它失败并显示“Non-resolvable parent POM”消息。

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

我试图检查代码3次为父,项目C/POM和子项目2,但代码被放置到彼此没有关系的单独的目录,所以没有太多的帮助那里

PS 我没有使用模块,虽然我尝试过使用模块,但没有任何区别。我没有发布实际的POMs,因为这些都非常微不足道,基本上pom有parent元素,这就是所有的关系。

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

+0

这是一个多模块构建,其中在项目-A,子项目1等中使用父项? – khmarbaise

+0

不是真的 - 这仅限于指向父pom的子pom。在我的情况下,它是sub2.pom-> projC.pm - > ../ parent.pom – Bostone

+0

您的其他项目(例如,A和子1)已经建立在别的地方吗? –

回答

2

MVN会寻找依赖在三个地方,在本地文件系统上的相对路径,在M2回购缓存在本地计算机上,或在一个外部回购。如果你在竹子可以访问的仓库上安装所有的依赖关系,你的构建可能会工作。

为了在本地机器上测试这个功能,你可以从根目录下执行mvn install(把所有依赖关系放在你的机器上的m2 repo中),然后在一个单独的目录中检出subproject2,然后mvn install subproject2 ?

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

+0

“整棵树”是什么意思?在我的本地机器上,我可以毫无问题地构建这个项目。我认为Bamboo的问题在于它将3个项目拖入不相关的独立目录,然后在构建开始时找不到父POM – Bostone

+0

更新我的答案 – sbridges

+0

只需重申 - 所有向上依赖关系都已部署到repo,但是当Bamboo尝试在子项目上执行“mvn install”,它会抱怨父依赖项丢失 – Bostone

1

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

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

为了帮助您,我们确实需要更多信息。您在其中一条评论中提到“所有[上游]依赖关系已被部署到回购”。你是指你的本地存储库(即.m2/repository)?您应该仔细检查该目录是否包含所有父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输出?

+0

在我的(原始)图中,每个节点(和叶)都包含pom.xml。在顶层没有pom.xml,因为您看到与A和B处于同一级别的“父级”目录以及来自A,B,C ... N的“父级”目录被称为“../parent”。所有上游项目都部署在本地和远程回购站中 – Bostone

0

每个maven模块都应该是独立的,使用相对链接来说明../parent打破了这个设计。

尝试并通过GAV属性明确定义父母,然后确保这些poms在您当地的maven回购中受版权保护,您将能够构建子项目。

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

你遇到的唯一问题是当你碰撞版本时,你将不得不开始安装root pom文件来推动解析过程。