Maven enforcer没有检测到jdk 1.7

时间:2013-03-29 21:17:37

标签: maven java

我正在使用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 enforcer:display-info

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

3 个答案:

答案 0 :(得分:8)

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

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

只有maven才能获取.mavenrc,因此其他Java程序不会受到此更改的影响。

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:0)

你没有说出你在运行的操作系统,但命令&#34; java ....&#34;将在路径上找到第一个名为java(或Windows上的java.exe)的可执行文件,这可能是也可能不是您想要与Maven一起使用的文件。

Linux下有一个名为&#34;的替代品&#34;将特定的java安装映射到几乎可以肯定的位置(除非你弄乱你的路径)是你的第一个路径。此系统的目的是允许您在系统上保留许多版本的程序,例如java,并且除非您指定不同的内容,否则将使用默认程序。

然而,这与Maven有,这需要正确运行JDK安装。在maven依赖的java JDK安装中有许多可执行文件,javac编译器,用于构建jar的jar可执行文件,只是为了命名最明显的。使用替代系统,您必须为每个替代系统映射替代方案,您可能很容易错过一些。这就是为什么Maven依赖于JAVA_HOME变量。

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