2016-04-27 45 views
0

我試圖運行Ant構建生成一個罐子,我得到以下錯誤:Ant構建 - JAVA_HOME變量不會得到更新

Unable to locate tools.jar. Expected to find it in /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/lib/tools.jar 
Buildfile: /my/path/to/the/required.xml 

make: 
[javac] /my/path/to/the/required..xml:11: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds 

BUILD FAILED 
/my/path/to/the/required.xml:11: Unable to find a javac compiler; 
com.sun.tools.javac.Main is not on the classpath. 
Perhaps JAVA_HOME does not point to the JDK. 
It is currently set to "/usr/lib/jvm/java-1.8.0-openjdk- 1.8.0.91-0.b14.el7_2.x86_64/jre" 

我的問題:1。 我做了一些在線閱讀並且我得出結論,因爲我將它指向JRE,而不是JDK,因此它失敗了。起初,我沒有

export JAVA_HOME=readlink -f $(which java)

所以我更新,並遠銷我的JAVA_HOME變量,which javac命令的輸出。有趣的是,錯誤的最後部分沒有顯示更改的JAVA_HOME值。這是爲什麼?

  1. 這是什麼includeantruntime以及如何擺脫它?我使用ant 1.9.2
+0

你是否在同一個用戶的同一個shell中運行了ant任務,你之前已將JAVA_HOME設置爲JDK?如果不是你的錯。在shell中設置一個env var,它不是持久的,並且不會在其他shell會話之間共享! –

+0

他們在Redhat Linux 6上運行在相同的shell和相同的用戶帳戶,我使用bash shell。所以,這兩個命令的環境變量應該是共同的,這就是我的感受。 –

回答

1

您可能需要檢查並更新用於JAVA_HOME設置的ant配置文件。可能在文件/etc/ant.conf,$ HOME/.ant/ant.conf和$ HOME/.antrc中覆蓋爲.bashrc中的shell設置的$ JAVA_HOME的值。如果您執行bash -x,它將打印調試信息,該信息應該可以幫助您追蹤$ JAVA_HOME被覆蓋的位置。

0

也許它只是Ant首先尋找java可執行文件(即在JAVA_HOME變量或其他地方)的問題。

您可以測試,如果這是按照此處描述的設置fork="true"executable參數的情況: https://ant.apache.org/manual/Tasks/javac.html ,看看是否是這種情況。

此外,您是否真的在JVM中找到了tools.jar,您當前正指向您的JAVA_HOME?

+0

謝謝你的回答。如果Ant在其他地方查找java可執行文件,那麼爲什麼它在第一個JAVA_HOME設置下正常工作。 是的,我設法找到tools.jar在'which which javac'命令指向的目錄中。但是,輸出是與其他位置的符號鏈接。這是一個問題嗎? –

+0

對不起,我不清楚你的意思是「第一個JAVA_HOME設置正常工作」。從你的問題來看,我明白事實恰恰相反。我不認爲這個象徵性的聯繫是問題;這在Linux上很常見,據我所知,它以前對我很有用。 – Andrei