Maven如何确定用于命令行使用的插件的插件版本?

时间:2013-05-22 15:02:00

标签: maven maven-3

(在Mac上使用Maven 3.0.3和Java 7)

当我运行mvn dependency:analyze-duplicate时maven使用版本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总会回到最新版本(即使还没有在本地回购中)?

我错过了什么?谢谢大家的回复时间。

2 个答案:

答案 0 :(得分:8)

对于某些插件,Apache Maven已经在唯一的超级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-pomhelp:effective-pom,然后再次依赖超级pom中的版本。

答案 1 :(得分:3)

解决插件版本的过程描述为here

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

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

如果您为此插件指定了一个版本,请查看您的项目POM(或父pom)。

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