Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Как вызвать из приложения на java 6 jar, написанный на java 7?

#java


Есть приложение, компилируемое на Java 6. Нужно вызвать из него метод класса из jar,
который скомпилирован на Java 7. При попытке сделать это получаем ошибку

- java.lang.UnsupportedClassVersionError: ... : Unsupported major.minor version 51.0.


То-есть не соответствуют версии. Есть ли возможность вызвать из java6 jar на java7?
И если нет, то в каком направлении лучше всего двигаться?
Апгрейд/даунгрейд не возможны. Приложение java6 крутится на  tomcat.
Какие варианты по другому строить взаимодействие? Servlet, rmi, вызов из java bat
файла и др? Какой вариант проще и надежнее?
    


Ответы

Ответ 1



Есть 3 пути: Перекомпилировать проект Java 7 под Java 6. Плюс: если фич 7 версии нет или мало - очень быстро. Минус: если фич Java 7 много их удалять долго и поддержка двух версий языка может требовать много сил, ну и доунгрейд на старую и не надежную версию не очень хорошо. Попробовать запустить проект Java 6 на JRE7 (не обязательно компилировать, просто запустить). В Java хорошая поддержка обратной совместимости и проблем часто не будет, на всякий случай изучите документацию про совместимость разных версий. Плюс: если все нормально, почти не требует времени. Минус: в большой и сложной системе на новой версии может что-то неожиданно сломаться в рантайме (бывали случаи). Плюс по-правильному, желательно провести полное регрессионное тестирования всей большой системы, а это может быть очень дорогим удовольствием. Соединять системы не как jar, а через любые методы интеграции (rest сервисы, очереди сообщений, файлы на диске, общую память или другие методы коммуникации программ). При этом каждая система может запускаться на своей версии Java, либо под разными виртуалками или докер контейнерами или даже разными серверами. Возможно для интеграции потребуется написать небольшие модули для каждой системы. Плюс: будет более микросервисный подход и меньший шанс что что-то сломается, Минус: дополнительные затраты на интеграцию.

Ответ 2



Для этого приложение java6.jar нужно запускать из-под Java 7. Но возможны несовместимости (особенно если используются reflections). UPD. Другой вариант - пересобрать приложение java7.jar под Java 6.

Комментариев нет:

Отправить комментарий