10

(在带有 Java 7 的 Mac 上使用 Maven 3.0.3)

当我运行mvn dependency:analyze-duplicatemaven 时,使用插件的 2.1 版本(无论 2.8 在我的本地仓库中是否可用)并抱怨:

[ERROR] Could not find goal 'analyze-duplicate' in plugin org.apache.maven.plugins:maven-dependency-plugin:2.1 among available goals unpack-dependencies,....

当我运行它时,mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:analyze它工作正常。

我会假设,如果没有明确指定版本,maven 总是回退到最新版本(即使还没有在本地 repo 中)?

我错过了什么?感谢大家抽出时间回复。

4

2 回答 2

12

对于一些插件,Apache Maven 在唯一的 super-pom 中定义了一个默认版本,可以使用更新版本的 Maven 进行升级。查看当前主干:https ://git-wip-us.apache.org/repos/asf?p=maven.git;a=blob_plain;f=maven-model-builder/src/main/resources/org/apache /maven/model/pom-4.0.0.xml

<pluginManagement>
  <!-- NOTE: These plugins will be removed from future versions of the super POM -->
  <!-- They are kept for the moment as they are very unlikely to conflict with lifecycle mappings (MNG-4453) -->
  <plugins>
    <plugin>
      <artifactId>maven-antrun-plugin</artifactId>
      <version>1.3</version>
    </plugin>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-5</version>
    </plugin>
    <plugin>
      <artifactId>maven-dependency-plugin</artifactId>
      <version>2.8</version>
    </plugin>
    <plugin>
      <artifactId>maven-release-plugin</artifactId>
      <version>2.3.2</version>
    </plugin>
  </plugins>
</pluginManagement>

在 Maven-3.1 中,maven-dependency-plugin 和 maven-release-plugin 都已升级。以前的版本仍然使用 2.1 和 2.0(以相同的顺序)。

因此,如果您没有在您的版本中指定版本pom.xml或没有版本,这些是默认设置。

要查看有效的 pom,请执行mvn org.apache.maven.plugins:maven-help-plugin:2.2:effective-pomor help:effective-pom,但随后您(再次)依赖超级 pom 中的版本。

于 2013-11-13T19:18:25.647 回答
3

解析插件版本的过程在此处描述。

简而言之,Maven 将按此顺序使用此规则找到的第一个版本:

  • 在项目的 POM 中定义的版本
  • 插件注册表中定义的版本(如果启用)
  • 最新版本元数据
  • 发布版本元数据

因此,如果您在那里为该插件指定了版本,请查看您的项目 POM(或父 pom)。

更新:关于您的问题,原因是 maven-dependency-plugin 版本 2.1 在 maven Super POM的 pluginManagement 部分中指定。您的项目 pom 继承了这些设置,因此默认使用 2.1 版本(支持首先指出这一点的@Robert Scholte 的答案!)

于 2013-05-22T15:21:35.253 回答