Maven:为什么我可以运行mvn checkstyle:checkstyle而不用pom.xml配置?

时间:2015-11-27 12:45:51

标签: maven pom.xml checkstyle

我正在使用一个基本的maven项目,其中只在pom.xml中定义了以下内容:

  • 依赖javaee-api
  • 依赖junit
  • 插件maven-compile-plugin
  • 插件maven-war-plugin
  • 插件wildfly-maven-plugin

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

编辑:eclipse插件" Eclipse Checkstyle插件"已安装。这是什么原因?如果是,maven如何与之沟通?

2 个答案:

答案 0 :(得分:12)

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

要知道要执行哪个插件,maven使用插件前缀解析。

使用命令行mvn checkstyle:checkstyle作为示例,这大致与maven的作用相同:

  • 从执行中获取前缀,冒号前的位。在您的情况下checkstyle
  • 将此解析为插件的可能名称(artifactId)。为此,它使用两种可能的格式:
    • maven-${prefix}-plugin(官方Maven插件)
    • ${prefix}-maven-plugin(适用于其他来源的插件)
  • 所以它现在有maven-checkstyle-plugin作为插件的artifactId
  • 使用此artifactId和其中一个已配置的groupId搜索插件(默认使用groupId org.apache.maven.plugins进行maven搜索)
  • 找到maven-checkstyle-plugin
  • 执行目标(命令中冒号后的位),因此在这种情况下为checkstyle goal

所有这些都在官方专家文档的plugin prefix mapping页面上进行了更详细的解释和更好的解释。

答案 1 :(得分:1)

原因是插件可能不需要在pom中显式配置,也不需要绑定到要运行的阶段。因此,它总是可以通过直接调用运行(在调用Maven时指定目标而不是阶段):

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

查看lifecycle文档:

  

插件目标代表一个特定任务(比构建阶段更精细),它有助于构建和管理项目。它可能绑定到零个或多个构建阶段。未绑定到任何构建阶段的目标可以通过直接调用在构建生命周期之外执行。

它绝对与Eclipse插件无关。