2015-07-16 2 views
3

Вот небольшое объяснение моей проблемы.JAVA Compilation: скомпилируйте новую версию JVM и запустите на старой версии

У меня есть приложение, которое было скомпилировано с помощью java 1.5. Это приложение устанавливается на 2000 шт. (Блокбоксы), установленные в клиентских посылках. Ящик моего приложения часто обновляется, чтобы добавить новую функцию и исправления, но по техническим причинам обновить версию java не так просто, поэтому я должен продолжать использовать Java 1.5 на этих существующих машинах.

Несколько месяцев назад я получил запрос на новое требование для этого приложения. Чтобы выполнить эту задачу, я добавил использование Hazelcast в этом приложении.

Моей проблема, если следующий: - Hazelacast файл банка необходима Java 1.6 или выше, так что я должен скомпилировать мое приложение с 1.6 - Новая функциональность с помощью hazelcast будет активирована только по требованию настроек нового параметра. Это означает, что он не будет использоваться в уже установленных черных ящиках 2000 года. - Все новые черные ящики будут установлены с Jave 1.6 или выше, чтобы использовать функциональность Hazealcast.

Моя проблема заключается в том, что я хочу иметь уникальный исходный код и уникальную версию моего приложения для старых blackboses с использованием Java 1.5 и новых черных ящиков с использованием 1.6 или выше.

В начале моя идея заключалась в том, чтобы всегда компилировать версию 1.5 и убедиться, что новая функциональность будет активирована только в блокбозах с использованием java 1.6 или выше. Эта опция не работает, потому что, когда я компилирую с 1.5, компилятор жалуется, что файл jar-файла Hazelcast нуждается в 1.6 :(

Второй вариант заключается в компиляции с 1.6, но тогда я не могу быть уверен, что мое приложение все равно будет работать .? должным образом на всех blackboxes с помощью 1.5 :(

Я хотел бы знать, если кто-то здесь будет знать, как решать проблемы такого рода

Просто дайте мне знать, если мое объяснение не понятно;)

Заранее благодарим за помощь.

+0

Вы используете новую функциональность из банки, или ее источники находятся в старой банке? – rzysia

+0

Почему вы не тестируете все свое приложение на тестовой машине с java 1.6? – gRaWEty

+1

* «Второй вариант заключается в компиляции с 1.6, но тогда я не могу быть уверен, что мое приложение будет по-прежнему работать правильно на всех черных ящиках с использованием 1.5. :(* * Вот почему какой-то мудрый человек изобрел [_интеграционное тестирование _] (https: //en.wikipedia.org/wiki/Integration_testing) и [_system testing_] (https://en.wikipedia.org/wiki/System_testing). – Tom

ответ

1

JVM обратная совместимость. Вы можете запускать почти весь код из Java 1 на Java 8.

Так что лучший способ - использовать вариант два. Скомпилируйте его с 1.6 на некоторых испытательных машинах. И если он работает (что, скорее всего, будет), вам не придется вносить существенные изменения в приложение.

+0

Вы не можете запустить программу, скомпилированную с целевым 1.6 на JRE 1.5. что новая библиотека Hazelacast требует 1.6.Таким образом, проблема заключается в том, чтобы скомпилировать программу с целевым 1,5. – Uli

+0

Это то, что я сказал. Новая функция, которую он хочет использовать, работает на 1.6, поэтому я предложил использовать 1.6, а не 1.5 для всего приложение – gRaWEty

+0

неправильно. Java-двоичные файлы Java 8 не могут быть запущены в более старых версиях. Java не поддерживает обратную совместимость –

1

Вы можете скомпилировать код на Java 1.5 байткода с использованием JDK 1.6, просто заботиться о следующем:

  • -source=1.5 и -target=1.5 опция компилятора

  • следует указать загрузочный путь к классам в rt.jar от JRE 1,5

Увидеть этот пост для получения дополнительной информации: http://www.draconianoverlord.com/2014/04/01/jdk-compatibility.html

Публикация также рекомендует, если это возможно, просто создать приложение со старым JDK. Вам нужно выяснить другой процесс сборки и исключить несовместимые библиотеки из пути к классам. Если вы используете Maven, подумайте о наличии двух файлов pom.xml с дополнительным родительским файлом.

+0

Спасибо, я думаю, что именно здесь решение для меня :) – Ewmi

Смежные вопросы