当前位置: 首页 > 知识库问答 >
问题:

插件依赖项的Maven依赖项管理

陈野
2023-03-14

最近,我发现了以下问题:

当我为我的项目设置依赖项管理时,我有一个child-pom,它使用具有依赖项的插件,我想要与在我的依赖项管理中声明的依赖项同步。

在根pom中,我在依赖项管理中声明:

<dependencyManagement>
    <dependencies>
      ...
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>2.4.0</version>
        </dependency>
      ...
    <dependencies>
<dependencyManagement>

在子pom中,我有一个插件需要gwt-user:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>gwt-maven-plugin</artifactId>
    <version>2.4.0</version>
    <dependencies>
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>2.4.0</version>
        </dependency>
            ...
        </dependencies>
  ...
</plugin>

但是,如果我移除gwt-maven-plugin中使用的依赖版本,编译就会失败。

是不是还有别的办法可以实现呢?

PS:在maven和maven插件中有一个选择依赖版本的相关帖子没有回答我的问题

共有2个答案

邹举
2023-03-14

要让父POM控制子POM使用的插件版本,您应该在父POM的 部分中声明

您在 部分中将com.google.gwt:gwt-user定义为

我不确定您是打算将gwt-user用作插件还是作为依赖项,但应该将其列为两者中相同的实体,以便继承工作。

宣高朗
2023-03-14

根据以下几个环节来看,似乎是不可能的:

  • http://maven.40175.n5.nabble.com/dependency-management-within-plugin-dependencies-td78367.html
  • https://issues.apache.org/jira/browse/mng-2496

这里是我找到的一个变通方法,我想和大家分享一下,以防其他人也有同样的问题:

在我的根pom中,我定义了一个属性、一个依赖项管理和一个插件管理:

<properties>
    <gwtVersion>2.4.0</gwtVersion>
    <gwtMavenPluginVersion>2.4.0</gwtMavenPluginVersion>
</properties>

<dependencyManagement>
   <dependencies>
    ...
    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-user</artifactId>
        <version>${gwtVersion}</version>
    </dependency>
    ...
   </dependencies>
</dependencyManagement>

<build>    
  <pluginManagement>
        <plugins>
            <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>${gwtMavenPluginVersion}</version>
            <dependencies>
                <dependency>
                    <groupId>com.google.gwt</groupId>
                    <artifactId>gwt-user</artifactId>
                    <version>${gwtVersion}</version>
                </dependency>
                ...
            </dependencies>
            ...
        </plugins>
  ...
  </pluginManagement>
</build>

并且在我的子pom中,使用插件管理提供的关系(请参见Maven2-Problem with pluginManagement And Pare-Child relationship),我只声明插件依赖项:

<plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>gwt-maven-plugin</artifactId>
</plugin>

现在,如果我更改属性中的版本,它将自动影响所有直接依赖项和插件依赖项。

 类似资料:
  • 我正试图让maven下载所有的依赖项(编译、测试、插件等)。)这样我就可以避免让我们的dockerized构建浪费不必要的时间一遍又一遍地下载它们。 我们已经对maven build进行了dockerized,这样我们就可以从jenkins运行它,而无需在jenkins机器上安装大量构建特定的依赖项(Java、redis、maven依赖项等)。我们的构建依赖于增量docker构建,它只执行实际需要

  • 我试图编译JavaDocs,使用: 我不断出现以下错误: 和 显然,我对多模块/聚合项目的依赖性没有得到认可。在我的一个模块pom中,这两个都标记为依赖项。xml文件。我需要在父pom中为maven javadoc plugin提供额外的参数吗。xml? 编辑: 我运行了mvn安装,它似乎可以工作。我的父母是pom。xml是: 这个版本已经过时了,但这似乎不是问题。

  • 我已经创建了一个构建。war文件的非常简单的Maven项目。Maven Version3.2.3,Java Version1.7.0_67。pom.xml文件就是这个要点。 如果我运行,那么项目构建良好。但是,如果首先下载所有具有和的依赖项,然后运行进行脱机构建,则会出现如下错误。 我从两种方式创建的。m2/repository文件夹不同,使用依赖插件创建的文件夹缺少许多文件,其中大多数与Plex

  • 我正在使用maven shade插件创建一个胖罐子,其中也包括一些弹性城堡罐子。但这造成了问题,因为Bouncy Castle的未签名版本。

  • 我试图从命令行显示我正在使用maven dependency插件版本3.1.2开发的项目的完整依赖关系树,但是目标(以及maven dependency插件中的任何其他目标)没有显示依赖关系。插件的文档(https://maven.apache.org/plugins/maven-dependency-plugin/tree-mojo.html)声明默认情况下包含所有作用域,因此不需要使用-Dsc

  • Maven依赖项处理(即下载)是否通过插件完成 Maven是否在秘密使用依赖插件(https://maven.apache.org/plugins/maven-dependency-plugin/)?