2015-11-27 59 views
5

我使用的只有下面的事情是在pom.xml中定义的AA基本Maven项目:Maven:为什么我可以运行mvn checkstyle:checkstyle没有pom.xml配置?

  • 依赖的JavaEE-API
  • 依赖的junit
  • 插件Maven的编译插件
  • 插件Maven的战争插件
  • 插件wildfly - Maven的插件

为什么我可以运行mvn checkstyle:checkstyle在命令窗口中?我不应该定义checkstyle插件pom.xml?我错过了什么?

编辑:eclipse插件“Eclipse Checkstyle插件”已安装。这是原因吗?如果是的话,maven如何与它沟通?

回答

12

正如您已经看到的,可以直接从命令行执行插件,而无需在项目的POM文件中配置插件。

要知道你想执行maven的插件使用插件前缀解析。

使用命令行,mvn checkstyle:checkstyle,作为一个例子,这是大致做什么行家:

  • 采取前缀,冒号前的位,从执行。在你的情况下checkstyle
  • 将其解析为插件的可能名称(artifactId)。为此,它使用两种可能的格式:
    • maven-${prefix}-plugin(官方Maven插件)
    • ${prefix}-maven-plugin(其它来源的插件),所以现在它已经maven-checkstyle-plugin作为插件的artifactId的
  • 搜索具有此artifactId和配置的groupIds之一的插件(默认情况下使用groupId的maven搜索
  • 它找到了maven-checkstyle-plugin
  • 执行目标(命令后的冒号后的位),所以在这种情况下为checkstyle goal

所有这些都比官方maven文档的plugin prefix mapping页面更详细和更好地解释。

+0

非常感谢 - 现在我明白了!在我的方式中使用它在pom.xml中定义它有什么好处? – NthDegree

+1

很高兴的答案帮助。最大的好处是,如果您在POM中定义它,它将在模块的每个构建过程中的适当时间(它所绑定的生命周期阶段的一部分)运行。如果你没有在pom中配置它,那么你必须每次手动执行它。 – DB5

0

原因是插件可能不需要在pom中显式配置,也不需要绑定到要运行的阶段。在lifecycle文档

mvn [options] [<goal(s)>] [<phase(s)>] 

看:

一个插件目标代表一个特定的任务,因此,它总是可以通过直接调用运行(调用到Maven时指定的目标,而不是相) (比建造阶段更精细),这有助于项目的建设和管理。它可能会被绑定到零或更多的构建阶段。不受任何构建阶段限制的目标可以通过直接调用在构建生命周期之外执行。

它绝对没有什么与Eclipse插件。

相关问题