Понижение версии приложения с Java 1.6 до Java 1.5

У меня есть небольшое приложение, написанное на Java, которое было протестировано и работало на JRE_1.6. Теперь мне нужно запустить его против JRE_1.5. Я изменил исходный код, который должен был соответствовать требованиям Java 1.5, и проект скомпилировался нормально.

Проблема в том, что он использует несколько предварительно скомпилированных библиотек, таких как opencsv-2.3, и они были скомпилированы с помощью Java 1.6, поэтому вызов любого из их классов приводит к java.lang.UnsupportedClassVersionError.
Большинство из них - это com.apache libs + opencsv-2.3 + org.jdom

Как я могу определить, какие именно библиотеки нужно заменить? Как мне заменить нужные библиотеки?

Upd: часть как мне заменить на самом деле означает "что можно сделать, если нет более старой библиотеки?" Есть ли способ понизить версию скомпилированной библиотеки или мне нужно найти аналогичное решение на 1.5 и переписать код?


person svz    schedule 08.11.2012    source источник
comment
вам, вероятно, нужно найти старую версию этих библиотек, если они доступны ...   -  person davioooh    schedule 08.11.2012
comment
Ну да, наверное. Но первая часть - выяснить, какие библиотеки нужно заменить. Часть как мне заменить на самом деле относится к тому, что можно сделать, если нет библиотеки более старой версии. Можно ли как-то перекомпилировать двоичный файл?   -  person svz    schedule 08.11.2012
comment
возможно, вы можете попытаться перекомпилировать исходный код, если он предоставляется, но это зависит от того, какая версия java используется для кодирования библиотеки   -  person davioooh    schedule 08.11.2012


Ответы (3)


Я предлагаю вам посмотреть в манифесте каждой библиотеки такие строки, как

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

person Peter Lawrey    schedule 08.11.2012
comment
Большое спасибо. Это немного облегчает жизнь. - person svz; 08.11.2012
comment
Вы можете найти retroweaver.sourceforge.net полезным, поскольку он разработан для обеспечения обратной совместимости классов. Я никогда не использовал его сам, но его цель - создавать классы, совместимые с Java 1.4. - person Peter Lawrey; 08.11.2012

Как @Peter Lawrey, например opencvs:

opencvs-2.2

файл манифеста (MANIFEST.MF) находится в папке META-INF внутри jar.

person Robertiano    schedule 08.11.2012

У меня была такая же проблема, и я просто перестроил исходные файлы в open-csv с JDK 1.5 - проблема решена!

person TLH    schedule 20.05.2013