Maven在阶段或目标中执行的实际命令

时间:2017-05-28 19:25:04

标签: maven

这可能是关于Maven内部的一个问题,我没有太多的运气搜索和找到答案。简而言之,我很想知道Maven为每个阶段或目标实际执行的命令。例如,mvn package创建了jar文件,所以我认为它必须在某个时候调用jar -cf命令。

Maven在设计上是自以为是,这个命令没有出现在.pom文件中。但Maven实际上针对特定阶段和目标运行了哪些命令?有没有办法看到它们?

3 个答案:

答案 0 :(得分:1)

所有插件都是用Java(或基于JVM的语言)编写的,所以如果你能读懂它,你就可以找到它的作用。以下是maven-jar-plugin的示例:link1link2

但要实现这一目标,您需要确定在运行阶段时执行哪些插件和目标。有多种方式:

  1. 在输出中,Maven说明了它执行的目标,例如:
  2.   

    maven-resources-plugin:2.6:resources(default-resources)@ module-name

    1. 如果您生成有效POM,您将能够看到所有插件及其绑定的阶段:mvn help:effective-pom。有些插件具有默认阶段,因此人们不必明确指定它们 - 因为您必须查看插件元信息或源代码。
    2. 默认插件和目标由包装定义。对于默认包装,您可以查看default-bindings.xml(role-hint是包装名称)。
    3. 在您知道执行了哪些插件和目标后,您可以查看每个插件的来源(源通常是打开的),并查看其Mojos的实际源代码。

      如果您决定学习代码,那么在运行mvn命令时能够对其进行调试会很有用。为此,您可以使用mvnDebug代替mvn

      更多信息:click1click2

答案 1 :(得分:1)

创建jar文件的调用是在绑定到生命周期的maven-jar-plugin中完成的。您可以对幕后发生的事情进行mvn -X clean package。但你不会看到很多命令(javac编译除外)......你是什么意思:Maven is opinionated so by design, this command doesn't show up in the .pom filelife cycles显示运行哪种阶段bindings显示哪个插件在哪个阶段运行。

如果您想查看插件的来源,可以在此处找到所有插件:https://maven.apache.org/plugins/ 在右侧,您可以看到指向相应版本控制系统的链接以及指向它的链接。

每个插件都有一个指向源代码的链接,例如maven-jar-plugin:https://maven.apache.org/plugins/maven-jar-plugin/source-repository.html

答案 2 :(得分:-1)

使用 mvn 参数运行 -X,然后查找以“[DEBUG] Executing command line:”开头的行。