2012-11-08 73 views
3

我有一個用Java編寫的小應用程序,它已經過測試並在JRE_1.6上運行。現在我需要針對JRE_1.5運行它。我改變了我必須滿足Java 1.5要求的原始代碼,並且項目編譯正常。將應用程序從Java 1.6降級到Java 1.5

問題是它使用了一些預編譯的庫,如opencsv-2.3,而那些庫是用Java 1.6編譯的,所以調用它們的任何一個類都會導致java.lang.UnsupportedClassVersionError
他們大多是com.apache庫+ opencsv-2.3 + org.jdom

我怎麼能弄清楚哪些庫正好需要更換?我如何更換需要它的庫?

UPD:「有什麼可以,如果沒有舊的圖書館做」我怎能取代部分實際上代表是否有降級編譯庫的方法,或者是否需要在1.5上找到類似的解決方案並重寫代碼?

+1

您可能需要找到該庫的舊版本,如果它們可用... – davioooh

+0

嗯,是的,我可能會這樣做。但第一部分是找出哪些庫需要被替換。 *如何替換*部分實際上是指如果沒有舊版本庫可以做什麼。二進制可以重新編譯或以其他方式嗎? – svz

+0

如果提供的話,可能您可以嘗試重新編譯源代碼,但這取決於使用哪個版本的java編寫代碼庫 – davioooh

回答

5

我建議你在清單中查找每個庫線,如

Bundle-RequiredExecutionEnvironment: J2SE-1.3 
X-Compile-Target-JDK: 1.5 
Build-Jdk: 1.5.0_22 
Created-By: 1.6.0_21-b07 (Sun Microsystems Inc.) 

我將只需要如果出現沒有其他選擇了通過創建。

知道肯定的唯一方式是例如在圖書館一類(假設其中對於同一版本內置的所有類)

javap -v -classpath net\sf\trove4j\trove4j\3.0.2\trove4j-3.0.2.jar gnu/trove/list/TLongList | grep version 

    minor version: 0 
    major version: 49 

版本表是

major minor Java platform version 
45  3   1.0 
45  3   1.1 
46  0   1.2 
47  0   1.3 
48  0   1.4 
49  0   1.5 
50  0   1.6 
51  0   1.7 
52  0   1.8 

對於詳情http://en.wikipedia.org/wiki/Java_class_file

+0

非常感謝。這讓生活變得更輕鬆。 – svz

+0

您可能會發現http://retroweaver.sourceforge.net/有用,因爲它旨在使課程向後兼容。我從來沒有使用它,但它的目的是生成Java 1.4兼容類。 –

2

作爲@Peter Lawrey,例如opencvs:

opencvs-2.2

清單文件(MANIFEST.MF)位於jar內的文件夾META-INF中。

0

我有同樣的問題,我只是用JDK 1.5重新編譯open-csv中的源文件 - 問題解決了!