[英]How to run multiple plugin executions as a single argument to Maven?
是否可以在一个 maven 命令上运行所有<execution>
定义?
喜欢:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>first-execution</id>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.mycompany.FooServer</mainClass>
</configuration>
</execution>
<execution>
<id>second-execution</id>
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.mycompany.BarServer</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
我可以运行mvn exec:java@first-execution exec:java@second-excution
来运行两者,但是是否还有一个 maven 命令来简单地告诉 maven 运行定义中找到的任何<execution>
?
或者至少,所有匹配<goal>
的执行?
不可能,也不计划作为一项功能。 根据 Maven 项目负责人 Robert Scholte 的说法:
Maven 是生命周期驱动的。 能够从命令行执行目标是一项功能,但我认为不需要执行所有可用的 exeucutionId。
不要尝试将 maven 用作通用脚本工具 - 它的座右铭是“约定优于配置”。
如果您的构建需要执行外部可执行文件或 Java 代码,您可以将执行绑定到 maven阶段,如下所示:
<execution>
<id>first-execution</id>
<goals>
<goal>java</goal>
</goals>
<phase>compile</phase>
<configuration>
<mainClass>com.mycompany.FooServer</mainClass>
</configuration>
</execution>
如果你用mvn compile
调用它,那么绑定到这个阶段的所有执行(以及到这个阶段的所有其他阶段)都将被执行。 通常按照 ID 的顺序排列,因此您可能希望将 ID 设置为类似01-first
、 02-second
、 03-aaaa-third
。
配置maven插件的更多信息,参见官方文档
对于存在哪些阶段以及它们执行的顺序(以及在哪个生命周期中)的参考,还有一个很好的官方文档: Lifecycle Reference
请注意,一些插件是默认配置的,并且默认情况下也将多个执行绑定到阶段(这就是为什么例如mvn compile
编译 Java 代码而无需编译器插件的任何配置)。
另一种选择是切换到另一个具有不同理念的构建工具,比如Apache Ant - 它没有很好地包含依赖管理,但甚至可以从 maven 调用。或者使用基于 Groovy 构建的 DSL 的Gradle 构建工具或 Kotlin 作为配置,这样你就可以有一个非常灵活的配置(但不要在那里做,否则你会在你写完几个月后不理解你自己的构建配置;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.