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> 更清晰是个人喜好问题。