2013-03-29 58 views
1

我使用maven執行者插件只強制執行jdk 1.7(我正在使用java.nio.file)。 出於某種原因,maven執行者插件無法檢測到jdk 1.7。Maven執行者不檢測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執行者:display-info

顯示版本1.7而不是1.6 ...爲什麼執行檢測到java版本1.6?

+0

你的機器上有多個JDK嗎?請同時發佈maven-compiler-plugin的配置。 –

+0

運行mvn執行者:display-info在應用 MrTinkz解決方案後解決了它。 – ronnyfm

回答

5

版本刪除是固定的。你給的是java的確切版本。永遠記住,如果我們不確定我們應該使用確切的版本給範圍。版本更改爲[1.7,)

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

這意味着任何版本等於或大於1.7是可接受的值。

6

添加以下(或創建此文件,如果丟失的話)~/.mavenrc

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

.mavenrc是隻會被行家所以其他Java程序不會受到這一變化的影響。

0

你不會說你正在運行什麼操作系統,但命令「java ....」會在路徑中找到第一個名爲java(或windows上的java.exe)的可執行文件,這可能會或可能會不是你想用Maven使用的那個。

在linux下有一個名爲「alternatives」的系統,它將java的特定安裝映射到一個幾乎可以確定的位置(除非你把你的路徑弄得亂七八糟),才能成爲你的第一個路徑。這個系統的目的是允許你在你的系統上保存許多版本的程序,比如java,除非你指定了一些不同的東西,你可以使用默認值。

但是,這有沒有與Maven做,這需要JDK安裝才能正常運行。在java JDK安裝中有很多可執行文件,maven依賴的是javac編譯器,用於構建jar的jar可執行文件,只是爲了說明最明顯的。使用替代系統,你將不得不映射其中的每一個替代品,你可能會錯過幾個。這就是爲什麼Maven依賴於JAVA_HOME變量。

在linux系統上,設置JAVA_HOME變量的方便之處是文件〜/ .mavenrc。 Maven讀取該文件(如果存在)。