我们有java和在工作中的Flex项目。 我们目前有一个包含我们要使用这两个项目的配置1个基础POM。 这个问题是:Flex项目继承配置javadoc和PMD例如,他们不想要的。
我想这样做一点更清洁,有一个真正的基础,聚甲醛,然后一个Java的基础,聚甲醛和柔性基聚甲醛。 但是,如何在既有柔性的部分和一个Java部分多模块工作的呢?
我们有插件到我们自己的应用程序,我们使用以下结构:
- 我-插件
- 我-插件,客户端(柔性)
- 我-插件服务器(JAVA)
的我的插件只包含第一个pom.xml。 我会用我的,插件的pom.xml作为父母双方,但我也不能使用java基础,聚甲醛或柔性基聚甲醛也为父母。 什么是我们的最佳approarch?
一个项目只能有一个父(不像C ++多重继承),但这位家长可以是一个更大的父层次结构的一部分。 正如其他人指出的那样,你可以因此有这样的事情:
base-pom/
|-- flex-base-pom
| |-- my-plugin-client
| | `-- pom.xml
| `-- pom.xml
|-- java-base-pom
| |-- my-plugin-server
| | `-- pom.xml
| `-- pom.xml
`-- pom.xml
这就是说,我注意到你写你的实际问题是:
Flex项目继承javadoc的配置和PMD例如,他们不想要的。
您应该使用pluginManagement
元素来避免这种情况:
pluginManagement是沿着侧看到的插件的元件。 插件管理包含了几乎相同的方式,插件元素除了不是配置插件为这个特定的项目建设信息,它的目的是配置项目的基础,从这个继承。 然而,这仅会配置在孩子们的插件元素中实际引用的插件。 孩子们有充分的覆盖pluginManagement定义权。
所以,在父POM,配置你的插件pluginManagement
(的javadoc和PMD为例),以及中引用它们plugins
在希望孩子们(这里只在我-插件服务器)元素。 这将解决当前的问题。
尽管Maven项目有单亲,就可以输入任意数量的其他POM的是这样的:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>my-shared-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
<dependencyManagement>
这相比于父母两个重要的区别:
- 在进口POM定义插件将不导入
- 在进口POM定义的依赖性不会被添加到当前的POM, 它只会进口依赖到依赖管理部
但是,如果你的父母POM具有<依赖性>部分,要包括那些进入你的依赖,那么你可以在父添加到依赖部分就像一个普通的依赖关系:
<dependency>
<groupId>org.example</groupId>
<artifactId>my-shared-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
即使相同的依赖已被导入,版本标签必须再次指定。 为了减少重复,它可以存储在一个属性
唯一的办法是让基聚甲醛作为Java的基础-POM和柔性基聚甲醛的父母。
我有我的春天项目类似的结构:
base-pom (basic configuration - eclipse, reports, repositories, etc)
|
+ spring-base-pom (spring definitions)
|
+ spring-jar-base-pom (jar specific definitions)
|
+ spring-war-base-pom (spring web and servlet dependencies)
|
+ spring-webapp-base_pom (spring web mvc dependencies)
我已经越过这个确切proble还和我找到了最好的解决方案是使用继承和聚集在这个问题建议: 不Maven支持多个家长(多重继承)?
你可以有一个聚合聚甲醛,是不是它聚合项目的父。
而在解释Maven的文档
继承和聚集创造了一个动态控制,通过建立一个单一的,高层次的POM(...)相反,POM项目可聚合不继承它的项目。
从这个我有我的POM继承(POM主机包含公社配置,每个孩子的具体情况的):
pom-master
|-- pom-java
|-- pom-flex
所以我的项目可以得到每个模块的配置细节的希望:
project (aggregate project-flex & project-java)
|-- project-java
| `-- pom.xml => parent = pom-java
|-- project-flex
| `-- pom.xml ==> parent = pom-flex
`-- pom.xml => parent = pom-master
希望这将有助于其他人也:)
只是形象, pom.xml
实际上Java类:你只能有一个父(或扩展一个类),但是这个父还可以有另一位家长,等等。
正如我解释这里 ,你必须区分Maven的家长和聚集的原则,这意味着我的,插件将被视为一个聚集项目,不一定都对我-插件,客户端和我的-插件父父项目。
因此,要总结:
my-plugin
将确定所有项目的基础POM。 然后,创建两个新的聚甲醛项目: java-base-pom
和flex-base-pom
。 他们有两个my-plugin
父。 现在,我的-插件,客户端将有java-base-pom
作为父母,而我的-插件服务器将采用flex-base-pom
为他的父母。
这样一来,我的-插件,客户端将继承定义的所有属性my-plugin
的pom.xml,也从java-base-pom
项目。
可以实现与型材多重继承:
您创建的根POM(多个)配置文件,自动启动这些配置文件的任何变化达到Maven配置的多重继承。