我们当前工作的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)有更好的方法来实现这个目标吗?
答案 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>
部分中指定的模块。