Maven如何解决插件版本?

时间:2014-01-15 03:04:14

标签: maven maven-3 maven-plugin

我正在阅读the docs并且仍然对Maven如何决定下载哪个版本的插件感到困惑。

例如,请考虑以下简单方案:

  1. 一个空的本地存储库
  2. 默认settings.xml
  3. 运行一个简单的maven命令。例如mvn archetype:generate maven-archetype-quickstart {{1}} Maven in 5 Minutes文档中所述。
  4. 运行命令后,Maven所做的第一件事就是下载一堆插件。

    Maven正在下载的一些插件包括:

    • maven-clean-plugin-2.4.1
    • 行家安装-插件-2.3.1
    • 行家部署-插件-2.5

    为何选择这些版本?

    这些插件的最新版本是:

    • 行家洁净的插件-2.5
    • 行家安装-插件-2.5.1
    • 行家部署-插件-2.8.1

    我查看了LATEST version metadata的maven-clean-plugin,它是2.5

    我不一定要强迫Maven使用这些插件的不同版本,我只是想了解为什么它会解决这些版本。

    我正在使用Apache Maven 3.0.3

3 个答案:

答案 0 :(得分:10)

Maven在 META-INF / plexus / components.xml 中定义了3个生命周期:

<强> 1。默认生命周期

默认生命周期是在没有任何关联插件的情况下定义的。这些生命周期的插件绑定是针对 META-INF / plexus / default-bindings.xml

中的每个包装单独定义的。

e.g。 jar包装的插件绑定

<phases>
  <process-resources>
    org.apache.maven.plugins:maven-resources-plugin:2.6:resources
  </process-resources>
  <compile>
    org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile
  </compile>
  <process-test-resources>
    org.apache.maven.plugins:maven-resources-plugin:2.6:testResources
  </process-test-resources>
  <test-compile>
    org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile
  </test-compile>
  <test>
    org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
  </test>
  <package>
    org.apache.maven.plugins:maven-jar-plugin:2.4:jar
  </package>
  <install>
    org.apache.maven.plugins:maven-install-plugin:2.4:install
  </install>
  <deploy>
    org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy
  </deploy>
</phases>

<强> 2。清洁生命周期 clean lifecycle直接用它的插件绑定定义。

<phases>
  <phase>pre-clean</phase>
  <phase>clean</phase>
  <phase>post-clean</phase>
</phases>
<default-phases>
  <clean>
    org.apache.maven.plugins:maven-clean-plugin:2.5:clean
  </clean>
</default-phases>

第3。网站生命周期 站点生命周期直接使用其插件绑定定义。

<phases>
  <phase>pre-site</phase>
  <phase>site</phase>
  <phase>post-site</phase>
  <phase>site-deploy</phase>
</phases>
<default-phases>
  <site>
    org.apache.maven.plugins:maven-site-plugin:3.3:site
  </site>
  <site-deploy>
    org.apache.maven.plugins:maven-site-plugin:3.3:deploy
  </site-deploy>
</default-phases>

如果要覆盖这些默认插件版本,可以从命令提示符处执行,如下所示

mvn org.apache.maven.plugins:maven-clean-plugin:2.0:clean

而不是

mvn clean:clean

答案 1 :(得分:5)

每个版本的Maven二进制文件都有某些版本的插件版本硬编码。这是为了在用户不提供自己的版本信息的情况下进行一些可重现的构建。我们鼓励您这样做,一旦您使用您选择的插件版本填充<pluginManagement>部分,构建将开始使用它。

答案 2 :(得分:0)

如果在构建项目时使用-X选项,那就很清楚了。请在另一个帖子中查看我的答案: https://stackoverflow.com/a/48874533/4470135