如何使用平面模块层次结构部署maven父模块?

时间:2014-05-28 15:43:57

标签: java eclipse maven

我有3个maven模块。一个是父组合其他两个模块。 所有项目文件夹都在同一根级别。

虽然部署无效。以下配置有什么问题?

project-parent/pom.xml
project-commons/pom.xml
project-web/pom.xml

父-POM:

<project>
        <groupId>de.myproject</groupId>
        <artifactId>project-parent</artifactId>
    <packaging>pom</packaging>
    <modules>
        <!-- <module>../project-commons</module> -->
        <module>../project-web</module>
    </modules>
</project>

web的POM:

  <parent>
    <groupId>de.myproject</groupId>
    <artifactId>project-parent</artifactId>
    <version>1.0.0</version>
    <relativePath>../project-parent/pom.xml</relativePath>
  </parent>

结果:

[ERROR]   The project de.myproject:project-parent:1.0.0 has 1 error
[ERROR]     Child module \project-parent\..\project-web\pom.xml of \project-parent\pom.xml does not exist

项目结构:

svn/project-commons/trunk/pom.xml
svn/project-web/trunk/pom.xml
svn/project-parent/pom.xml

1 个答案:

答案 0 :(得分:1)

我将概述一种方法,我已成功用于可能满足您需求的大型和小型项目。

pom.xml
superpom/pom.xml
utils0/pom.xml
utils1/pom.xml
utils2/pom.xml
services0/pom.xml
services1/pom.xml
services2/pom.xml
war0/pom.xml
war1/pom.xml

在此示例中,utils和services模块生成jar;战争模块产生战争。在工具,服务和战争之间会有各种依赖关系。

superpom模块的类型为pom,只包含父pom。每个util / service / war pom.xml引用具有../ superpom的相对路径的父代:

<parent>
    <groupId>mygroup</groupId>
    <artifactId>superpom</artifactId>
    <version>1.3.3.3-SNAPSHOT</version>
    <relativePath>../superpom</relativePath>
</parent>

superpom / pom.xml不包含任何元素,也不以任何方式引用“child”模块/ poms。 superpom包含共享属性,插件配置,依赖版本等。这是一个大pom。所有其他模块的poms(通常)都很小。

顶级pom包含对所有其他模块(包括superpom)的引用。它没有父pom(至少没有一个存在于此项目层次结构中)。您使用顶级(而不是superpom)来构建所有内容。您可以使用配置文件(或其他方法)来控制要构建的模块,但我通常只是从这里构建整个树。对SCM,CI构建等的支持存在于这个顶级pom中,这使得所有其他项目(包括父pom)保持清洁,并且仅关注构建和测试工件。

我的maven结构中没有“trunk”的概念 - 这是一个正交的概念。如果我想在主干或分支上工作,我会查看相应的主干或分支结构。