Как выполнить метод из библиотеки JAR на другой JRE, чем JRE моего текущего проекта - PullRequest
1 голос
/ 29 апреля 2019

У меня есть проект 1, который должен работать на 1.7, этот проект зависит от другого проекта 2, построенного на 1.8.

Я пытаюсь вызвать класс из Проекта 2 внутри Проекта 1, но получаю известную ошибку, которая исправлена ​​в 1.8. Если я запускаю этот класс индивидуально в Project 2 в JRE 1.8, он отлично работает.

Есть ли какие-либо причины для динамического выбора целевой JRE для вызова метода?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Если вы хотите создать jar-файл и использовать оболочку для каждой программы, вы можете связать определенный jre с каждым исполняемым файлом.

  1. Скачать и запустить Launch4j

  2. В своем проекте затмения нажмите:

    File -> export -> runnable jar file -> next

    и выберите конфигурацию запуска для проекта, который вы хотите извлечь,Нажмите Finish

  3. Хорошая идея проверить каждую банку и убедиться, что она работает.Дважды щелкните мышью или найдите его с помощью команды cmd и выполните команду java -jar nameOfJarToTest.jar.

  4. Создайте подпапку для своего jre.Я просто назвал мой "JRE".

  5. Скопируйте и вставьте папки bin и lib из правильного jre в ту папку, которую вы только что создали.Мои файлы расположены в таком месте, как C:\Program Files\Java\jre1.8.0_201, если вы хотите запустить Java 8. Чтобы быть более ясным, ваша файловая структура должна быть

someContainerFolder (папка, которую вы только что создали)

  nameOfJarToTest.jar

  jre(folder you just made)

        bin(folder copied from the jre in your file system)

        lib(folder copied from the jre in your file system)

Запустите Launch4j.Добавьте .jar и выберите путь к выходному файлу.Поля, изображенные ниже enter image description here

Нажмите на вкладку jre и добавьте свой соответствующий jre в поле min jre.Убедитесь, что вы выбрали опцию Only use private jdk runtimes.Введите «jre» (если вы назвали папку с помощью «bin» и «lib» jre) в поле «связанный путь jre», изображенное ниже.

enter image description here

Нажмите «Построить оболочку».Похоже, настройки винтик.enter image description here

Если вы сделаете это для обоих файлов jar и убедитесь, что папки 'bin' и 'lib' находятся в jre, который вы хотите запустить, дваобе программы будут нормально работать в разных средах выполнения.Если вы хотите, чтобы одна программа могла вызывать другую, я обнаружил, что на веб-сайте geeksforgeeks есть очень простой и лаконичный способ вызова внешних исполняемых файлов из вашего кода , если вы в порядке с каноническими путями.

0 голосов
/ 29 апреля 2019

Это невозможно, если ваш проект зависит от 1.7, его зависимости также должны быть 1.7. Во время выполнения весь код выполняется в одной и той же JVM, и нет способа динамически «выбрать» целевую JRE.

Если у вас действительно нет другого варианта, и две библиотеки должны работать вместе, вы могли бы построить какой-то мост между проектом 1 и 2, где проект 1 вызывает проект 2 в отдельном экземпляре JVM.

...