2013-05-22 35 views
5

(在Mac上使用Maven 3.0.3与Java 7)Maven如何确定从命令行使用插件的插件版本?

当我运行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总是会回退到最新版本(即使还没有在本地回购)。

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

+0

您是否解决了这个问题?非常感兴趣的解决这个确切的问题出于同样的原因 – Ittai

回答

7

对于某些插件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的依赖,插件和Maven释放小插件已升级。以前的版本仍然使用2.1和2.0(以相同的顺序)。

因此,如果您尚未在您的pom.xml中指定版本或者您没有指定版本,则这些是默认值。

要查看有效的pom,请执行mvn org.apache.maven.plugins:maven-help-plugin:2.2:effective-pomhelp:effective-pom,但是您仍然(依然)依赖超级pom中的版本。

+0

谢谢!我正在运行用户maven 3.0.5,并仍然有这个问题。任何想法,我可以看看“我的”超级POM的副本?澄清神秘的 – Ittai

+1

https://jira.codehaus.org/browse/MNG-5400,所以我错了与Maven版本。我把它推到了2.5,Herve稍后变为2.8,看到https://git-wip-us.apache.org/repos/asf?p=maven.git;a=history;f=maven-model-builder/ src/main/resources/org/apache/maven/model/pom-4.0.0.xml; h = e8b42d87a082bd52d80f438d3b36cf424513a55b; hb = 9404499ccdf27f6505ba4538130168c411f41eea。所以,是的,Maven 3.0.5仍然指向m依赖-2.1 –

+0

+1这可能是行为的原因 – FrVaBe

3

解析插件版本的过程描述here

总之Maven会顺序使用这个规则中的第一个版本:

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

所以在你的项目POM(或父POM)看看如果你在那里为这个插件指定了一个版本。

更新:关于你的问题的原因是,该Maven的依赖插件版本2.1在Maven Super POM的pluginManagement部分规定。您的项目pom会继承这些设置,因此默认情况下会使用2.1版本(Upvote首先指出这一点的@Robert Scholte的回答!)

+0

谢谢你的回答。 问题是,运行你的help-command它说'Name:Maven Dependency Plugin ... Version:2.8' - 但运行它没有提到的版本仍然执行版本2.1 - 甚至下载它,如果丢失。 我也检查了pom文件。它根本不包含对这个插件的引用。 所以我的问题还没有完全解答。 也许你可以帮助我找出在哪里可以找到特定插件的最新版本和发布版本元数据?特别是对于依赖插件。 - 也许这是我面临的问题? –

+0

检出http://mvnrepository.com/artifact/org.apache.maven.plugins/maven-dependency-plugin我假设所有版本高达2.7被正确标记为发布。这足以触发“RELEASE版本元数据”? –

+0

@Tom Fink你的pom中有你的声明吗? – FrVaBe