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

Maven如何解析插件版本?

姚雅珺
2023-03-14

我正在阅读这些文档,仍然不知道Maven是如何决定下载哪些版本的插件的。

例如,考虑以下简单场景:

  1. 一个空的本地存储库
  2. 默认settings.xml
  3. 运行一个简单的maven命令。例如,mvn原型:生成用于maven-archetype-快速启动,如Maven在5分钟文档中所述。

运行命令后,Maven做的第一件事就是下载一堆插件。

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

  • maven-clean-plugin-2.4.1
  • maven-install-plugin-2.3.1
  • maven-deploy-plugin-2.5

为什么选择这些版本?

这些插件的最新版本是:

  • maven-clean-plugin-2.5
  • maven-install-plugin-2.5.1
  • maven-deploy-plugin-2.8.1

我看了maven-cle-plugin的最新版本元数据,它是2.5

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

我正在使用Apache Maven 3.0.3

共有3个答案

韩玉石
2023-03-14

如果您在构建项目时使用-X选项,它会变得非常清楚。请在另一个线程中检查我的答案:https://stackoverflow.com/a/48874533/4470135

东方震博
2023-03-14

Maven二进制文件的每个版本都有特定版本的插件版本硬编码。这是为了在用户不提供自己的版本信息的情况下进行某种程度上可复制的构建。我们鼓励您这样做,一旦您填充了< code >

广瑞
2023-03-14

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

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 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
 类似资料:
  • 在eclipse中获取以下错误,同时导入maven项目并尝试更新它...错误解决版本的插件'org.springframework.boot: sping-boo-maven-plugin'从仓库[本地(C:\tBuild\repo),中央(https://repo.maven.apache.org/maven2)]:插件没有找到任何插件库- 在此处输入图像描述

  • 我正在使用Apache-Maven-3.0.5,但我得到以下错误: 从存储库解析插件'org.mortbay.jetty:jetty-maven-plugin'版本时出错[local(C:\documents and settings\lamiranda.m2\repository),vaadin-snapshots(http://oss.sonatype.org/content/reposito

  • 我是Java EE和Maven的新手,所以我不确定需要哪些信息才能看到我犯了错误。 当我右键单击我的项目并进入Maven-->Reload project时,build选项卡打开,出现以下错误 当我悬停maven assembly插件时,IDE还告诉我 如果我需要任何进一步的信息,请告诉我。

  • Sonar和Jenkins位于同一台机器上,Sonar分析在Jenkins作业发布步骤中运行。詹金斯的工作是用Maven 3.0.5构建的。 一切都很好,直到我们从4.5更新了声纳。从昨天的x到5.1.2。 更新sonar后,步骤失败,出现异常: org.apache.maven.lifecycle.生命周期执行异常:未能执行目标org.codehaus.mojo: sonar-maven-plu

  • 所有POM都有作为它们的版本,也在dependencies标签下。它通过上传到Nexus repo。 我们最近开始做。因此,所有20个父POM现在都是和版本,因为它们都位于nexus中。所有标记现在都指向 开发人员不想指向发布版本。他们需要来自同行的edge开发版本,不管它是否不稳定。 SCM只希望指向版本,因为他必须每周执行一次,但由于指向快照版本而失败。 现在我知道了版本插件,但问题是,我应该

  • 我正在尝试使用Maven版本插件将所有子POM升级到父版本,并在父POM中执行所有子模块的构建。Pom文件如下所示 现在,如果我使用Eclipse中的命令在基本POM上运行Maven构建 子模块正在正确构建,但是如果我将base pom版本更新到2.0并使用版本插件命令 版本正在更新,但子模块尚未构建。只有基本pom得到构建。 我是否必须明确指定在某个阶段构建子模块?我错过了什么?。