构建选择jar子集的多个EAR

时间:2012-02-21 07:01:36

标签: maven maven-3

我们当前工作的Maven结构构建了一个EAR,如下所示

工作区

>parent proj (containing root pom.xml)
    >ear proj
    >web proj
    >jar1
    >jar2
    >jarN

我们现在需要对其进行自定义,以便使用罐子组合构建多个EAR(针对不同的需求)。

所以建议的工作区现在看起来像这样:

工作区

>parent proj (containing root pom.xml)

    >ear projects
        >ear1 
        >ear2
    >web projects
        >web1
        >web2

    >component jars
        >jar1
        >jar2
        >jarN

在ear1项目pom.xml中,我们想挑选和选择我们需要的Web项目和jar项目。

问题是:

a)以上结构是可能的 - 因为名为“ear projects”,“web projects”,“component jar”的文件夹实际上没有POM并且没有构建任何内容

b)是否可以使用同一文件夹之外的人工制品构建ear1 pom.xml?

早期的项目ear1与jar1和jar2并行,并且都是根pom.xml的子模块。但是在提出的结构中,ear1是使用不并行的模块构建的,但是../web projects / web1 ../component jars / jar1等等。

c)有更好的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

提供的工作空间看起来不错。为清楚起见,我会把它放在这里(注意, ear web 组件都是空目录)。

parent (contains root pom.xml)
|--- ear
     |--- ear1 (contains ear1 pom.xml)
     |--- ear2 (contains ear2 pom.xml)
|--- web
     |--- web1 (contains web1 pom.xml)
     |--- web2 (contains web2 pom.xml)
|--- components
     |--- jar1 (contains jar1 pom.xml)
     |--- jar2 (contains jar2 pom.xml)
     |--- jarN (contains jarN pom.xml)

由于项目依赖项是从存储库(本地或远程)获取的,因此模块不会位于同一级别上是没有问题的。您应该将它们声明为通常的依赖项。例如,在 ear1 中,您可以指定:

<dependencies>
  <dependency>
    <groupId>_your_groupId_</groupID>
    <artifactId>_jar1_artifactId_</artifactId>
    <version>_jar1_version_</version>
  <dependency>
  <dependency>
    <groupId>_your_groupId_</groupID>
    <artifactId>_web1_artifactId_</artifactId>
    <version>_web1_version_</version>
  <dependency>
</dependencies>

我不确定我是否完全理解你的需求,但我会试着描述我会做什么。

您可以使用配置文件指定要构建的项目。例如,假设 ear1 项目依赖于 jar1 jar2 jar4 web2 项目。在这种情况下,在根 pom.xml 文件中,您可以指定如下的配置文件:

<profiles>
  <profile>
    <id>ear1</id>
    <modules>
      <module>components/jar1</module>
      <module>components/jar2</module>
      <module>components/jar4</module>
      <module>web/web2</module>
      <module>ear/ear1</module>
    </modules>
  </profile>
</profiles>

如果您运行mvn package -P ear1,那么Maven将只构建在个人资料的<modules>部分中指定的模块。