Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven enforcer插件缺少或无效规则_Java_Maven_Maven 3_Pom.xml_Maven Enforcer Plugin - Fatal编程技术网

Java Maven enforcer插件缺少或无效规则

Java Maven enforcer插件缺少或无效规则,java,maven,maven-3,pom.xml,maven-enforcer-plugin,Java,Maven,Maven 3,Pom.xml,Maven Enforcer Plugin,我正在尝试为maven设置enforcer插件,以强制执行最低Java版本。但是,每当我尝试运行mvn enforcer:enforce,我都会得到: 目标org.apache.maven.plugins:maven enforcer plugin:1.3.1:enforce的参数“rules”丢失或无效 以下是我的pom文件的相关部分: <plugin> <groupId>org.apache.maven.plugins</groupId>

我正在尝试为maven设置enforcer插件,以强制执行最低Java版本。但是,每当我尝试运行
mvn enforcer:enforce
,我都会得到:

目标org.apache.maven.plugins:maven enforcer plugin:1.3.1:enforce的参数“rules”丢失或无效

以下是我的pom文件的相关部分:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.3.1</version>
    <executions>
        <execution>
            <id>enforce-java</id>
            <phase>validate</phase>
            <goals>
                <goal>enforce</goal>
            </goals>
            <configuration>
                <rules>
                    <requireJavaVersion>
                        <version>(1.7.0-20,)</version>
                    </requireJavaVersion>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

org.apache.maven.plugins
maven enforcer插件
1.3.1
强制执行java
验证
执行
(1.7.0-20,)

我还尝试将
块替换为
,以防某些内容无效,但仍然失败,并出现相同的错误。

可能是您使用了无效的规则名称。查看页面。 规则名称区分大小写。 虽然这里不是这样

----编辑----

请注意,POM配置的执行ID为
EnforceJava
,并且执行绑定到生命周期的
validate
阶段。mvn enforcer:enforce命令运行的是一个目标,而不是生命周期中的一个阶段。您在POM中提供的配置不适用于
enforcer:enforce
目标

有两种方法可以实现这一点。你选择哪一个取决于你需要什么

  • 如果您只是尝试测试enforcer插件配置,而没有运行整个构建,请运行
    mvn validate
  • 如果要求
    mvn enforcer:enforce
    工作,则将执行ID更改为
    default cli

  • 我在尝试构建vertx workshop项目时遇到了完全相同的错误。事实证明,该错误主要是与enforcer插件版本相关的问题。下面的配置为我解决了这个问题

    
    org.apache.maven.plugins
    maven enforcer插件
    3.0.0-M3
    强制执行java
    执行
    执行
    (1.8.0,)
    
    在我的例子中,问题是我将enforcer配置放在Maven配置文件的构建部分中,当我运行
    mvn validate
    时,该配置文件没有被构建。一个简单的
    mvn验证-P correctProfile
    为我修复了它。最后,我将其放入一个多模块应用程序的父项目中,将字节码执行器规则的传递搜索设置为true:
    true
    ,并验证子项目中不正确的依赖关系确实会导致生成失败。

    我最初使用的是,但当我在此处复制它时,我做得不正确。即使使用有效的规则名称,我也会遇到相同的错误。我编辑了这篇文章以更正此问题。将id更改为
    default cli
    可使
    mvn enforcer:enforce
    正常工作。但是
    mvn validate
    始终成功,即使强制要求没有得到满足。您应该检查您提供的Java版本范围。我想你会喜欢这样做:'[1.7.0,)`.
    default cli
    为我修复了它,谢谢。我喜欢Maven如何要求难以找到的神秘咒语来让最简单的事情工作。公平地说,是
    execution
    使此配置复杂化。
    enforcer:enforce
    如果您将配置添加到插件而不是特定的execute,它也会工作注意:类似这样:
    org.apache.maven.plugins maven enforcer plugin 3.0.0-M2
    可能与@acm重复在我的情况下,解决方案是默认cli参数,这是公认答案的一部分。不太明显的是,在不起作用的情况下,我总是会遇到执行目标org.apache失败的错误.maven.plugins:maven enforcer plugin:3.0.0-M3:enforce(默认cli)on project:未配置任何规则。如果要禁用执行,请使用跳过标志。