Maven Enforcer Plugin:通过命令行指定规则
Maven Enforcer Plugin: Specify rules via command line
我想通过命令行执行Maven Enforcer plugin。
我试过:
mvn enforcer:enforce -Drules=[requireReleaseDeps]
mvn enforcer:enforce -Drules=requireReleaseDeps
我总是收到这个错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce (default-cli) on project lkww-util-app-wurm-admin-rs-api: The parameters 'rules' for goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce are missing or invalid -> [He
lp 1]
如何指定 rules
参数?
强制执行器插件不允许通过命令行参数chosen/engaged规则。
有一个 open issue 反对这个插件,所以你可以投票给那个。
与此同时,如果您选择的规则可以归类为少量选择,那么您或许可以创建配置文件并将规则与配置文件相关联,从而允许构建 运行 选定的子集通过指定配置文件来规则。在下面的示例中有两个配置文件,每个配置文件都有不同的执行者规则:
<profiles>
<profile>
<id>EnforceBannedPlugins</id>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>enforce-banned-plugins</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedPlugins>
...
</bannedPlugins>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</profile>
<profile>
<id>EnforceMavenVersion</id>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>enforce-maven-version</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
...
</requireMavenVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</profile>
</profiles>
当然,如果您需要在 运行 时间指定强制执行规则,那么这只是一个 运行 问题可以通过一些固定配置来满足。但是,如果要求是支持 任何 可能的执行者规则,那么你就不走运了,因为插件不支持那个。
您也可以在 POM 的主要部分预先配置 <executions>
,然后使用 <execution>
的 <id>
从命令行调用它们(有关此语法的更多信息,请参阅 Guide to Configuring Plug-ins):
mvn enforcer:enforcer@my-execution-id
作为 enforce
goal by defaults binds the goal to the validate
phase, however, the my-execution-id
execution also runs on a normal mvn clean install
. If that is not desired, configure the execution with <skip>true</true>
的任何 <execution>
并在命令行上覆盖它:
mvn enforcer:enforcer@my-execution-id -Denforcer.skip=false
这是否比将 maven-enforcer-plugin
配置分布在 POM 的主要部分和 <profiles>
更清晰是个人喜好问题。
我想通过命令行执行Maven Enforcer plugin。
我试过:
mvn enforcer:enforce -Drules=[requireReleaseDeps]
mvn enforcer:enforce -Drules=requireReleaseDeps
我总是收到这个错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce (default-cli) on project lkww-util-app-wurm-admin-rs-api: The parameters 'rules' for goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce are missing or invalid -> [He
lp 1]
如何指定 rules
参数?
强制执行器插件不允许通过命令行参数chosen/engaged规则。
有一个 open issue 反对这个插件,所以你可以投票给那个。
与此同时,如果您选择的规则可以归类为少量选择,那么您或许可以创建配置文件并将规则与配置文件相关联,从而允许构建 运行 选定的子集通过指定配置文件来规则。在下面的示例中有两个配置文件,每个配置文件都有不同的执行者规则:
<profiles>
<profile>
<id>EnforceBannedPlugins</id>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>enforce-banned-plugins</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<bannedPlugins>
...
</bannedPlugins>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</profile>
<profile>
<id>EnforceMavenVersion</id>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>enforce-maven-version</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
...
</requireMavenVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</profile>
</profiles>
当然,如果您需要在 运行 时间指定强制执行规则,那么这只是一个 运行 问题可以通过一些固定配置来满足。但是,如果要求是支持 任何 可能的执行者规则,那么你就不走运了,因为插件不支持那个。
您也可以在 POM 的主要部分预先配置 <executions>
,然后使用 <execution>
的 <id>
从命令行调用它们(有关此语法的更多信息,请参阅 Guide to Configuring Plug-ins):
mvn enforcer:enforcer@my-execution-id
作为 enforce
goal by defaults binds the goal to the validate
phase, however, the my-execution-id
execution also runs on a normal mvn clean install
. If that is not desired, configure the execution with <skip>true</true>
的任何 <execution>
并在命令行上覆盖它:
mvn enforcer:enforcer@my-execution-id -Denforcer.skip=false
这是否比将 maven-enforcer-plugin
配置分布在 POM 的主要部分和 <profiles>
更清晰是个人喜好问题。