可以Maven项目有多个父?(Can maven projects have multiple pa

2019-09-01 22:24发布

我们有java和在工作中的Flex项目。 我们目前有一个包含我们要使用这两个项目的配置1个基础POM。 这个问题是:Flex项目继承配置javadoc和PMD例如,他们不想要的。

我想这样做一点更清洁,有一个真正的基础,聚甲醛,然后一个Java的基础,聚甲醛和柔性基聚甲醛。 但是,如何在既有柔性的部分和一个Java部分多模块工作的呢?

我们有插件到我们自己的应用程序,我们使用以下结构:

  • 我-插件
    • 我-插件,客户端(柔性)
    • 我-插件服务器(JAVA)

的我的插件只包含第一个pom.xml。 我会用我的,插件的pom.xml作为父母双方,但我也不能使用java基础,聚甲醛或柔性基聚甲醛也为父母。 什么是我们的最佳approarch?

Answer 1:

一个项目只能有一个父(不像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在希望孩子们(这里只在我-插件服务器)元素。 这将解决当前的问题。



Answer 2:

尽管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>

这相比于父母两个重要的区别:

  1. 在进口POM定义插件将不导入
  2. 在进口POM定义的依赖性不会被添加到当前的POM, 它只会进口依赖到依赖管理部

但是,如果你的父母POM具有<依赖性>部分,要包括那些进入你的依赖,那么你可以在父添加到依赖部分就像一个普通的依赖关系:

<dependency>
    <groupId>org.example</groupId>
    <artifactId>my-shared-dependencies</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

即使相同的依赖已被导入,版本标签必须再次指定。 为了减少重复,它可以存储在一个属性



Answer 3:

唯一的办法是让基聚甲醛作为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)


Answer 4:

我已经越过这个确切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

希望这将有助于其他人也:)



Answer 5:

只是形象, pom.xml实际上Java类:你只能有一个父(或扩展一个类),但是这个父还可以有另一位家长,等等。

正如我解释这里 ,你必须区分Maven的家长和聚集的原则,这意味着我的,插件将被视为一个聚集项目,不一定都对我-插件,客户端和我的-插件父父项目。

因此,要总结:

my-plugin将确定所有项目的基础POM。 然后,创建两个新的聚甲醛项目: java-base-pomflex-base-pom 。 他们有两个my-plugin父。 现在,我的-插件,客户端将有java-base-pom作为父母,而我的-插件服务器将采用flex-base-pom为他的父母。

这样一来,我的-插件,客户端将继承定义的所有属性my-plugin的pom.xml,也从java-base-pom项目。



Answer 6:

可以实现与型材多重继承:

您创建的根POM(多个)配置文件,自动启动这些配置文件的任何变化达到Maven配置的多重继承。



文章来源: Can maven projects have multiple parents?