将参数添加到从命令行调用的 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 为您提供了一种额外的方式来定义强制规则。
继之后,现在可以从命令行调用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 为您提供了一种额外的方式来定义强制规则。