Maven 如何在命令行中识别没有组 ID 的插件?

use*_*447 5 maven

使用 Maven,我可以从命令行运行这样的命令,它可以工作:

mvn compiler:compile
Run Code Online (Sandbox Code Playgroud)

即使我没有提供组 ID,Maven 如何知道我想使用哪个插件?

whi*_*aaa 6

Maven 插件通常遵循以下两种命名约定之一:

  • ${name}-maven-plugin
  • maven-${name}-plugin(为 Apache Maven 项目插件保留)

遵循其中一种约定的插件,例如maven-compiler-pluginwildfly-maven-plugin,可以通过其缩写版本在命令行上使用;compiler或者wildfly。这使得您不需要提供完全合格的groupId:artifactId:version:command表格。

你绝对可以这样做:

mvn org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile使用其完全限定名称,但显然缩写形式更容易使用。

还有一些其他方法可以提供缩写形式。插件开发指南对此提供了一些详细信息,特别是“缩短命令行”段落。


kriegaex更新: Maven 默认情况下似乎也只搜索组 IDorg.apache.maven.pluginsorg.codehaus.mojo,所以如果你运行类似的东西

mvn buildplan:list-phase
Run Code Online (Sandbox Code Playgroud)

结果将是

[ERROR] No plugin found for prefix 'buildplan' in the current project and
        in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo]
        available from the repositories
Run Code Online (Sandbox Code Playgroud)

如果您希望在命令行上更方便,即在本例中不指定组 ID fr.jcgay.maven.plugins,请将其添加到~/.m2/settings.xml

mvn buildplan:list-phase
Run Code Online (Sandbox Code Playgroud)

  • 我在您的有用答案中添加了“缩短命令行”的直接链接。我已经使用 Maven 多年了,但从未真正了解它,最近在使用 mvn versions:set -DnewVersion=1.2.3 之类的东西时想知道它实际上是如何工作的,因为我没有在 POM 中指定版本 Maven。我还添加了有关如何添加更多默认插件组的信息。很抱歉打乱你的答案,但我发现它很有价值,不想再添加一个,因为在我看来,你应该得到赞成票。 (2认同)