这可能是关于Maven内部的一个问题,我没有太多的运气搜索和找到答案。简而言之,我很想知道Maven为每个阶段或目标实际执行的命令。例如,mvn package
创建了jar文件,所以我认为它必须在某个时候调用jar -cf
命令。
Maven在设计上是自以为是,这个命令没有出现在.pom
文件中。但Maven实际上针对特定阶段和目标运行了哪些命令?有没有办法看到它们?
答案 0 :(得分:1)
所有插件都是用Java(或基于JVM的语言)编写的,所以如果你能读懂它,你就可以找到它的作用。以下是maven-jar-plugin的示例:link1,link2。
但要实现这一目标,您需要确定在运行阶段时执行哪些插件和目标。有多种方式:
maven-resources-plugin:2.6:resources(default-resources)@ module-name
mvn help:effective-pom
。有些插件具有默认阶段,因此人们不必明确指定它们 - 因为您必须查看插件元信息或源代码。在您知道执行了哪些插件和目标后,您可以查看每个插件的来源(源通常是打开的),并查看其Mojos的实际源代码。
如果您决定学习代码,那么在运行mvn
命令时能够对其进行调试会很有用。为此,您可以使用mvnDebug
代替mvn
。
答案 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 file
?
life 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:”开头的行。