簡體   English   中英

Ant在哪里設置'java.home'(並且它是錯的)並且它應該附加'/ jre'嗎?

[英]Where does Ant set its 'java.home' (and is it wrong) and is it supposed to append '/jre'?

好的,我在CentOS 6.3上使用Ant版本1.7.1(默認安裝):

[theuser@dev-ingyhere ~]$ ant -version
Apache Ant version 1.7.1 compiled on August 24 2010
[theuser@dev-ingyhere ~]$ cat /etc/*-release
CentOS release 6.3 (Final)

我有JAVA_HOME設置,我運行ant

[theuser@dev-ingyhere ~]$ export JAVA_HOME=/usr/java/jdk1.7.0_17 ; echo $JAVA_HOME ;
/usr/java/jdk1.7.0_17
[theuser@dev-ingyhere ~]$ ant -diagnostics | grep java\\.home
java.home : /usr/java/jdk1.7.0_17/jre

這更有趣:

[theuser@dev-ingyhere ~]$ export JAVA_HOME=/a/fools/folly ; echo $JAVA_HOME ; ant -diagnostics | grep java\\.home
/a/fools/folly
java.home : /usr/java/jdk1.7.0_17/jre
[theuser@dev-ingyhere ~]$  env | grep JAVA
JAVA_HOME=/a/fools/folly 

所以,我確實得到了一件事 - 顯然Oracle的Java 7 Javadoc for Class System是錯誤的(駭然!),它將java.home系統屬性描述為“Java安裝目錄”。 我知道,因為Java(TM)系統屬性教程java.home 系統屬性描述為“Java運行時環境(JRE)的安裝目錄”。 換句話說,環境中的JAVA_HOME不一定等於JVM系統屬性中的java.home (那是什么?!)

問題: Ant在何處以及如何獲取/設置系統屬性java.home

真的是一個JVM內部問題

由於Ant只是回顯java.lang.System屬性(請參閱上面原始帖子中的注釋),這實際上是一個JVM問題。 Java HotSpot虛擬機是核心解釋器。 代碼可在hg.openjdk.java.net在線獲得

在HotSpot(os_linux.cpp)的C ++代碼的第309行os類中有一個init_system_properties_values()方法。 它有一些溫和的啟發式方法可以嗅出名為home_path的變量的位置,該變量最終被設置為Java用戶所看到的“java.home”。 代碼中的注釋表明'<java_home> / jre'正式被指定為“java.home”的java.lang.System屬性值(在JDK安裝的情況下)。

我在d:\\ jdk的Windows機器上安裝了JDK,但運行帶有-XshowSettings的d:\\ jdk \\ bin \\ java.exe顯示其內置的java.home指向c:\\中的系統級JRE安裝Program Files \\ Java \\ jre1.8.0_91。 我懷疑我通過刪除d:\\ jdk \\ jre來破壞我的安裝,而不理解私有JRE與公共JRE的角色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM