从类型为pom

时间:2017-10-24 13:11:00

标签: maven-3 pom.xml maven-plugin

我有项目A,其中包含以下依赖项:

    <dependency>
        <groupId>vo.cjm.modules.shared</groupId>
        <artifactId>basic</artifactId>
        <version>1.0.0</version>
        <type>pom</type>
    </dependency>

在这个依赖项的pom中我配置了一个插件。但是,在maven本地存储库中安装项目时,永远不会执行此插件。将插件移动到项目A的pom时,它将被执行。

与继承插件的父子maven项目相比,我发现自己处于只继承依赖项的情况。是否真的在使用pom类型时,只继承了依赖项而没有插件?如果是,如何在没有父子结构的情况下继承maven中的插件?

我也尝试过,使用的是父项目。在这个项目中,我定义了子模块,项目A.在项目A中,我引用了父项目。执行此操作时,maven会生成“重复版本”错误/警告。消除此行为的唯一方法是删除项目A的版本。现在,项目A版本继承自父项目。我希望能够独立管理项目A的版本,所以这不是一个选项。

我还尝试使用父项目,并在那里定义一个模块(项目A)。但是,这只适用于您将始终在父项目上调用maven的假设。在项目A上运行maven,不会继承父项目中的任何内容。

2 个答案:

答案 0 :(得分:1)

您必须区分父子机制和依赖机制。

  • 为pom指定父级(从而成为子pom)时,您将继承<dependencies><plugins>元素中声明的每个依赖项和插件
  • 使用<dependencies>在您的pom中引用依赖关系时,您告诉Maven &#34;我需要在我的项目中使用此工件(jar,pom,other),以及任何其他依赖项artifact也取决于&#34; ,但与此依赖项使用的插件无关。插件仅在使用Maven构建内容时使用。一旦构建了工件并且可用,就没有理由在构建工件时包含这个工件使用的插件 - 想象一下,如果对于你使用的每个依赖项,你有大量的插件你可能不想突然添加到你的建立!
  

使用pom类型时,只继承了依赖项而没有插件吗?

是。当您的依赖项属于pom类型时,您只是告诉Maven将此pom的所有依赖项添加到当前pom中。

  

如果是,如何在没有父子结构的情况下继承maven中的插件?

据我所知,你不能。如果要继承插件,则必须使用父pom。

答案 1 :(得分:0)

我说依赖项不是Maven项目对象模型的一部分,所以我说不。

我们正在使用父子架构来重用父母的插件。

我们省略将它们用作快照

parent with plugins +
                    |
                    + another parent with plugins +
                    |                             |
                    |                             + child artifact uses plugins
                    + child artifact uses plugins

等等。

因此父母可以举例说明Java版本,或者他们可以包含子项目可以使用的配置文件。

这些都不是反应堆项目(没有&#34;模块&#34;),只是普通的POM项目,原因如下:为儿童提供插件,配置文件和依赖管理。