向从命令行调用的 Maven Enforcer Rules 添加参数

JF *_*ier 7 java command-line-interface maven maven-enforcer-plugin

在/sf/answers/4157299891/之后,现在可以从命令行调用 Maven 执行器插件。

这很有效,但不幸的是我还不明白是否可以通过命令行设置规则参数。一个例子是version在RequireMavenVersion规则中。

Rob*_*lte 5

不,你不能。由于这些期望,我实际上对当前的实施并不满意。第一个用例是一个简单的无参数规则。当然我们可以预测接下来的问题。

我们首先解释一下“复杂”的插件配置是如何工作的。看一下下面的例子:

<rules>
  <requireMavenVersion>
    <version/>
  </requireMavenVersion>
</rules>
Run Code Online (Sandbox Code Playgroud)

这里 requireMavenVersion 是与 EnforceMojo(或enforce目标)位于同一包中的小写类名,version 是此类的设置器。你看到的不过是一个Pojo。这里唯一的要求是 RequireMavenVersion 实现 EnforcerRule 接口,因此 Maven 可以调用其execute方法参见:

 @Parameter
 private EnforcerRule[] rules;
Run Code Online (Sandbox Code Playgroud)

如果您想从命令行调用规则,插件会尝试将规则重命名为完全限定的类名,并为其创建一个新实例。接下来将调用其执行方法。

对此功能的要求是在不触及项目的情况下强制执行规则。这应该作为 Maven 扩展来解决,它更适合该用例。

但结论是:不,你不能。

更新从 Maven Enforcer 3.0.0 开始,有一个Maven Enforcer 扩展,它为您提供了一种额外的方法来定义强制执行器规则。