2014-03-06 89 views
0

在點擊「發佈」按鈕之前,我實際上已經想出了我的問題的答案,但這對我來說非常沮喪,我將繼續發佈並希望它能幫助其他人。答案如下。爲什麼我在不同的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。

+2

這可能是一年中的優勝作文 – Baby

+0

謝謝,我不知道有這樣的事情。我希望這可以幫助至少一個人。 – Topher

回答

1

正如上面提到的,不知何故,在輸入這​​段文字之後,我發現我需要檢查什麼。這是發生了什麼。

線索是在「歷史上,這些項目使用Java 1.5和1.6的混合物」。當我第一次在工作站上開始使用這些項目時,在每個項目中,我右鍵單擊build.xml文件,並「以Ant腳本運行」。這很好,但我不知道,在每種情況下都創建了一個.launch(又名外部工具配置)文件,其中包含從項目的屬性中獲取的包括要使用的Java版本的信息。在某些情況下,這是1.5。默認情況下,這些.launch文件隱藏在某個Eclipse目錄的某個位置,不在項目目錄中,其中包含控制項目及其構建的所有其他文件。要使用這些啓動配置執行任何操作,必須單擊帶有紅色行李箱的小按鈕,選擇「外部工具配置」,然後使用生成的對話框。其中一個選項卡是「JRE」,在那裏,可以指定哪個JRE與Ant構建一起使用,就像在項目屬性/ Java構建路徑/庫中一樣 - ,但是這些JRE的使用規範是分開的,並且僅在首次創建啓動配置時才連接。因此,您可以在從Eclipse進行調試和執行時運行一個Java版本,而在使用Ant進行構建時可以運行不同版本的Java。
請注意,如果您只是通過右鍵單擊它並選擇「作爲Ant腳本運行」來啓動Ant構建腳本,並且您從不單擊小紅色行李箱,您將永遠不會意識到這些啓動配置,但它們無論如何將被使用。

在「外部工具配置」對話框中,您可以選擇是將配置(.launch文件)保存爲「本地文件」(默認值)還是「共享文件」。我覺得這個術語很混亂。 「本地文件」意味着隱藏在本地工作站的某個Eclipse目錄中,並且不與在該項目上工作的其他人共享。 「共享文件」是指您的Eclipse工作區目錄中的項目,您可以在其中查看它並將其簽入到Subversion中,而檢出項目的其他開發人員將爲其Ant構建獲得相同的配置。我推薦後者。

相關問題