3

我有一个用 Java 编写的小应用程序,它经过测试并在 JRE_1.6 上运行。现在我需要针对 JRE_1.5 运行它。我更改了必须符合 Java 1.5 要求的源代码,并且项目编译良好。

问题是它使用了许多预编译的库,比如opencsv-2.3那些是用 Java 1.6 编译的,所以调用它们的任何类都会导致java.lang.UnsupportedClassVersionError.
其中大部分是com.apachelibs opencsv-2.3++org.jdom

我怎样才能确定哪些库需要被替换?如何替换需要它的库?

更新:如何替换部分实际上代表“如果没有旧库可以做什么?” 有没有办法降级已编译的库,或者我需要在 1.5 上找到类似的解决方案并重写代码?

4

3 回答 3

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

于 2012-11-08T11:19:13.400 回答
2

作为@Peter Lawrey,例如opencvs:

opencvs-2.2

清单文件(MANIFEST.MF)位于 jar 内的 META-INF 文件夹中。

于 2012-11-08T11:34:55.597 回答
0

我有同样的问题,我只是用 JDK 1.5 重建了 open-csv 中的源文件 - 问题解决了!

于 2013-05-20T14:13:35.407 回答