将参数添加到从命令行调用的 Maven Enforcer 规则

Add parameters to Maven Enforcer Rules called from the command line

继之后,现在可以从命令行调用Maven enforcer 插件。

这很好用,可惜我还没有弄明白是否可以通过命令行设置规则参数。例如 RequireMavenVersion 规则中的 version

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

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

<rules>
  <requireMavenVersion>
    <version/>
  </requireMavenVersion>
</rules>

这里的 requireMavenVersion 是小写的 class 与 EnforceMojo(或 enforce 目标)相同的包中的名称,版本是此 class 上的 setter。你看到的只不过是一个 Pojo。这里唯一的要求是 RequireMavenVersion 实现了 EnforcerRule 接口,所以 Maven 可以调用它的 execute 方法见:

 @Parameter
 private EnforcerRule[] rules;

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

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

但总而言之:不,你不能。

更新 从 Maven Enforcer 3.0.0 开始,有一个 Maven Enforcer Extension 为您提供了一种额外的方式来定义强制规则。