5

我正在使用 maven enforcer 插件来强制执行 jdk 1.7(我正在使用 java.nio.file)。由于某种原因,maven enforcer 插件无法检测到 jdk 1.7。

λ ~/ java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
λ ~/ javac -version
javac 1.7.0_13
λ ~/ mvn --version
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 15:51:28+0200)
Maven home: /usr/local/Cellar/maven/3.0.5/libexec
Java version: 1.7.0_13, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_13.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.7.5", arch: "x86_64", family: "mac"

这是我在 pom.xml 中的代码 -

   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-enforcer-plugin</artifactId>
      <executions>
        <execution>
          <id>enforce-versions</id>
          <goals>
            <goal>enforce</goal>
          </goals>
          <configuration>
            <rules>
              <requireJavaVersion>
                <version>1.7</version>
              </requireJavaVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>

这是我得到的错误 -

[INFO] --- maven-enforcer-plugin:1.2:enforce (enforce-versions) @ com.microsoft.gittf.core ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireJavaVersion failed with message:
Detected JDK Version: 1.6.0-43 is not in the allowed range 1.7.

编辑

mvn 执行者:显示信息

显示版本 1.7 而不是 1.6...为什么强制检测 Java 版本 1.6?

4

3 回答 3

8

添加以下内容(如果缺少,则创建此文件)~/.mavenrc

export JAVA_HOME=/Library/Java/JavaVirtualMachines/{your-jdk-here}/Contents/Home

仅由 maven 获取,.mavenrc因此其他 Java 程序不会受到此更改的影响。

于 2013-12-04T04:31:21.557 回答
8

版本声明是固定的。你给的是一个确切版本的java。永远记住,如果我们不确定我们应该使用的确切版本,请给出范围。将版本更改为 [1.7,)

          <requireJavaVersion>
            <version>[1.7,)</version>
          </requireJavaVersion>

这意味着任何等于或大于 1.7 的版本都是可以接受的。

于 2013-06-05T02:23:56.203 回答
0

你没有说你在什么操作系统下运行,但命令“java ....”会在路径上找到第一个名为 java(或 windows 上的 java.exe)的可执行文件,这可能是也可能不是那个您想与 Maven 一起使用。

linux 下有一个名为“alternatives”的系统,它将特定的 java 安装映射到一个几乎可以肯定(除非你弄乱你的路径)在你的路径上的位置。该系统的目的是允许您在系统上保留许多版本的程序,例如 java,除非您指定不同的内容,否则您将使用一个作为默认版本。

然而,这与 Maven无关,它需要安装 JDK 才能正确运行。maven 依赖的 java JDK 安装中有许多可执行文件、javac 编译器、用于构建 jar 的 jar 可执行文件,仅举几个最明显的例子。使用替代系统,您必须为每一个映射替代方案,您可能很容易错过一些。这就是 Maven 依赖 JAVA_HOME 变量的原因。

在 linux 系统上,设置 JAVA_HOME 变量的一个方便的地方是文件 ~/.mavenrc。Maven 会读取该文件(如果存在)。

于 2014-08-09T17:22:18.823 回答