Maven 构建多个JAR子集

Maven 构建多个JAR子集,maven,maven-3,Maven,Maven 3,我们目前正在工作的Maven结构构建了一个EAR,如下所示 工作空间 >parent proj (containing root pom.xml) >ear proj >web proj >jar1 >jar2 >jarN >parent proj (containing root pom.xml) >ear projects >ear1 >ear2

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

工作空间

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

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

    >component jars
        >jar1
        >jar2
        >jarN
我们现在需要对其进行定制,以便使用JAR组合构建多个EAR(用于不同的需求)

因此,建议的工作区现在将如下所示:

<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>
工作空间

>parent proj (containing root pom.xml)
    >ear proj
    >web proj
    >jar1
    >jar2
    >jarN
>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项目”、“web项目”、“组件JAR”的文件夹实际上没有POM,也没有构建任何内容

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

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


c) 有没有更好的方法来实现这一点?

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

由于项目依赖关系是从存储库(本地或远程)获取的,所以模块不在同一级别上是没有问题的。您应该将它们声明为常规依赖项。例如,在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>

_你的群组ID_
_jar1_人工关节_
_jar1_版本_
_你的群组ID_
_web1_-artifactId_
_web1_版本_
我不确定我是否完全理解你的需求,但我会尽量描述我会做什么

可以使用配置文件指定要生成的项目。例如,假设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>

耳1
组件/jar1
组件/jar2
组件/jar4
web/web2
耳朵/耳朵1

如果您运行
mvn包-p ear1
,那么Maven将只构建配置文件
部分中指定的模块。

a)是的,没有问题b)您可以更具体一点,并添加一个示例来说明您的意思吗?c) 可能:)@AndrewLogvinov:updated我已经在使用配置文件了,我的未知位是将所需模块指定为
component/jar1
,而不是
jar1
。这看起来像我需要的,将测试它并让你知道。谢谢