2012-11-08 2 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 используется для кодирования lib – 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) находится в папке META-INF внутри банки.

0

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