配置规则后maven-enforcer-plugin执行仍失败,原因何在?
Maven Enforcer插件执行提示"No rules are configured"的解决办法
问题原因
你在pom.xml里把规则配置在了<executions>下的特定执行单元(execution)中,但直接运行mvn enforcer:enforce时,Maven调用的是插件的默认CLI执行实例(default-cli),这个实例不会读取你在<executions>内部定义的配置,所以才会提示没有配置规则。
解决方案
有两种可行的解决方式:
方式一:指定执行单元ID运行
直接在命令中指定你配置的execution ID(你的配置里是enforce),这样Maven就会使用该执行单元下的规则配置:
mvn enforcer:enforce@enforce
方式二:将配置移到插件全局范围
把规则配置从<executions>内部移到插件的根<configuration>节点下,这样默认的CLI执行也能加载到规则:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.baz</groupId> <artifactId>foo</artifactId> <version>1.0-SNAPSHOT</version> <name>foo</name> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.5.0</version> <!-- 全局配置,默认CLI执行会读取这里的规则 --> <configuration> <rules> <AlwaysPass/> </rules> <fail>true</fail> </configuration> <executions> <execution> <id>enforce</id> <goals> <goal>enforce</goal> </goals> <!-- 如果需要绑定生命周期,可保留此执行单元,无需重复配置规则 --> </execution> </executions> </plugin> </plugins> </build> </project>
额外说明
<executions>里的配置是用来绑定Maven生命周期阶段(比如compile、package)时使用的,当你通过生命周期命令(如mvn package)触发插件执行时,才会加载对应execution的配置。而直接调用插件goal(mvn enforcer:enforce)时,默认使用插件的全局配置,或者需要显式指定execution ID来加载对应配置。
内容的提问来源于stack exchange,提问作者Mr.
相关产品推荐
相关产品推荐

