2012-11-08 75 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中的源文件 - 问题解决了!