Запуск Java 8 банок, когда доступно только Java 11 JRE - PullRequest
3 голосов
/ 13 марта 2020

У меня есть сторонний исполняемый файл JAR, к которому у меня нет доступа к исходному коду. Он был скомпилирован с Java 8 и использует некоторые пакеты javax для обработки XML. Они находятся в Java EE и были удалены из последних версий Java SE.

Я хочу запустить этот файл JAR стороннего производителя на хост-компьютере, который я не могу контролировать. На нем установлено Java 11, и мне не разрешено устанавливать на него Java 8.

Я видел этот ответ , в котором говорится, что способ решить эту проблему перестроить приложение с дополнительными зависимостями для замены пакетов Java EE, которые были удалены из Java 11 jre. К сожалению, я не могу использовать этот ответ, потому что у меня нет доступа к исходному коду. Могу ли я вместо этого использовать аргумент -classpath для команды java -jar, чтобы решить эту проблему?

Ответы [ 2 ]

5 голосов
/ 13 марта 2020

Если это исполняемый файл jar, то у него есть файл META-INF/MANIFEST.MF, который устанавливает путь к классу.

Вам не нужен исходный код. Просто распакуйте файл jar, добавьте дополнительные записи для необходимых дополнительных сторонних jar-файлов в файл Class-Path в файле MANIFEST.MF и восстановите его.

Затем отправьте файл jar вместе с дополнительным баночки сторонних производителей.


Пример

Скажем, ваш файл foo.jar использует JAF (java .activation), то есть ему нужно javax.activation-1.2.0.jar добавлено в classpath.

Отредактируйте файл MANIFEST.MF и добавьте javax.activation-1.2.0.jar в конец значения Class-Path, отделенного от существующих значений пробелом. Если нет Class-Path, добавьте его:

Class-Path: javax.activation-1.2.0.jar

Затем отправьте обновленный файл foo.jar и новый javax.activation-1.2.0.jar, чтобы поместить его в ту же папку.

0 голосов
/ 13 марта 2020

java -jar не позволяет установить пользовательский путь к классу.

...