在點擊「發佈」按鈕之前,我實際上已經想出了我的問題的答案,但這對我來說非常沮喪,我將繼續發佈並希望它能幫助其他人。答案如下。爲什麼我在不同的eclipse項目中獲得不同的java版本?
我正在使用Eclipse Kepler,它是用Java 1.7構建的(但我不認爲這個問題會在這個問題上發揮作用)。我的問題是,我在不同的項目中結束了不同版本的java。
我有幾個相關的項目,我會稱它們爲BV_S,BV_A和BV_L。在我接手這項工作之前,有一個醜陋的Subversion External事件被設置,以便BV_A和BV_L項目每個都從BV_S項目的深處抽取一些java源文件。爲了清除這個問題,我決定把所有共享的源代碼拖出來,並創建一個新的BV_Common項目,它將創建一個BV_Common.jar文件,然後在構建三個現有項目中使用該.jar文件。從歷史上看,這些項目使用Java 1.5和1.6的混合體。我的意圖是用1.6來完成所有的事情。
我創建了BV_Common.jar文件,將其檢入到Subversion中,並在其他項目中設置了Subversion External屬性,以便這個.jar文件在每個BV_S,BV_A和BV_L項目中都可用,並且修改了三個項目中的每個項目的屬性以包含BV_Common.jar。
當我使用「作爲ANT腳本運行」在這些項目中的每一箇中運行build.xml腳本時,我得到不同的結果。 BV_L構建得很好。 BV_A和BV_S都得到可怕的「錯誤的類文件等等等等BV_Common.jar ...類文件有錯誤的版本50.0,應該是49.0」錯誤 - 這表明我試圖使用用Java 1.6構建的.jar文件同時運行java 1.5。
在所有這些項目中,build.xml文件都引用了精心收集的共享構建XML文件(從一個公共源代碼中提取)。這些文件所做的一件事就是打印出「java.version」的值。對於BV_L項目,報告爲1.6.0_30;對於BV_S和BV_C,它是1.5.0_14。所以不知何故,在某個地方,這些項目被告知要使用(或兼容?)Java 1.5。但對於我的生活,我無法弄清楚在哪裏。
這是我看過的。在所有情況下,我在所有四個項目(BV_Common,BV_L,BV_C和BV_S)上看到的值都是相同的:
在庫項目屬性屏幕Java Build Path中,JRE系統庫設置爲使用「JavaSE-1.6(jdk1.6.0_30)」的「執行環境」。
在項目屬性窗口Java編譯器中,勾選了「啓用項目特定設置」複選框,並且在JDK合規性下,選中「在Java Build Path中使用符合執行環境的JavaSE-1.6」複選框。
在每個項目中都有一個.settings文件夾,其中包含一個org.eclipse.jdt.core.prefs文件。這些文件是從項目到項目的字節對字節相同。特別地,它們各自包含這些行:
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.source=1.6
在每個項目中,有一個項目文件(我假定控制的Eclipse);除了項目名稱以外,這些文件都是相同的。
每個項目都有一個.classpath文件,而這些不同,因爲每個項目都有一套不同的,它需要各種.jar文件,但都包含行
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
和它們包含沒有別的,看起來像一個java編譯器,JDK或JRE規範。
BV_Common的build.xml腳本與其他腳本不同,因爲它創建.jar文件,但其餘三個項目在其構建腳本中幾乎完全相同。它們僅在以下方面有所不同:
project.name屬性
project.jvm_arguments屬性 - 一個指定附加的-D選項來標識配置文件。
但是在某處,某些東西正在將Java 1.5與我的BV_L和BV_S項目相關聯。
我試着關閉並重新啓動Eclipse。
這可能是一年中的優勝作文 – Baby
謝謝,我不知道有這樣的事情。我希望這可以幫助至少一個人。 – Topher