2012-12-10 32 views
0

在我最近的项目中介绍给Maven后,过去几周我一直在尝试使用它。独立构建Maven子模块

我目前在我的开发环境中有一个多模块项目。项目“A”和项目“B”是项目的“根”的子模块,具有对A.

依赖B I我知道,我可以用mvn reactor:make...所概述here建立乙独立。但是,我很好奇为什么我不允许从B的根文件夹中创建B.

为了说明这一点,我首先通过在A的根目录下运行clean install来独立构建A.然而,当我试着做从B的根目录相同的动作,Maven的报道如下错误 -

Could not find artifact org.divesh.mavenrnd:root:pom:1.0 in central 

它看起来像Maven是不能够解决家长的POM文件。任何想法为什么发生这种情况?从我对Maven多模块项目的最初理解中,将项目拆分为子模块的主要原因是共享依赖关系。但是,这不应该阻止我从其文件夹中独立构建特定的模块。

谢谢。

编辑

然的mvn -N clean install在代表只安装根项目的POM。在此之后,我能够编译和安装A.后,成功地构筑b,则仍然有一件事我不是很清楚 - 假设我已经安装了根项目的POM在资源库中,如果我尝试建立一个,它指的是直接在它上面的父根POM还是在存储库中安装的POM?

回答

1

您应该使用MVN -pl ProjectToBuild生命周期像从树的根:

mvn -pl module-b package 

你不应该使用MVN反应器:做了。除非你正在使用maven 2。0

如果你wan't,以确保一切都取决于模块b为建设以及你应该使用:

mvn -amd -pl module -b package 

最好是具有代表的相应结构的文件夹的布局项目和不使用relativePath是必要的。

+0

这适用于我。除了这个答案:如果你还想建立'-pl'列表中项目所需的项目,可以使用'-am' **(也是make)**选项。在上面的问题中,由于B依赖于A,而不是先构建A,我们可以使用'mvn -am -pl B install'。 –

3

没错。你提到的错误告诉你,maven找不到父母的pom。

你有2个选择这里:

  1. 首先调用mvn -N install在你的项目根目录来安装父POM到本地存储库。然后你可以去B的目录并建立子模块。
  2. 指定的子模块POM <relativePath>。默认情况下,maven将只在文件系统的上一级查找父级pom。如果您的项目有其他的目录结构,你必须指定为了让行家找到你的父POM这个选项。

这里有一个例子:

<parent> 
    <groupId>...</groupId> 
    <artifactId>...</artifactId> 
    <version>...</version> 
    <relativePath>../../pom.xml</relativePath> 
</parent> 
+0

编辑我的问题回答你的答案。谢谢。 –