Хочется странных альтернатив

3 views
Skip to first unread message

Rinat H. Sadretdinow

unread,
Oct 11, 2019, 9:00:02 AM10/11/19
to
Hello All!

А вот как бы так бы сделать чтобы, к примеру, одна программа использовала одну
версию Java, а остальные другую? Про возможность *установки* разных версий Java
я знаю, про пакет alternatives тоже знаю, но тут получается что для запуска
первой программы надо сначала через alternatives указать конкретную версию
Java, после запускать программу, для остальных такая же последовательность,
только версию Java указать через alternatives другую, а после уже программы
запускать. А вот как бы обойтись без этого онанизма с каждый раз вызовом
alternatives и указываения нужной версии Java? Чтобы при запуске определённой
программы определённая версия Java, уже имеющаяся и установленная в системе,
подсовывалась этой программе автоматом? Можно конечно "единственную особую
программу" запускать через скрипт, в котором сначала вызывать alternatives,
выставлять требуемую версию Java, вызывать программу, после через alternatives
возвращать общую для всех остальных программ версию Java, но это как-то
неаккуратненько: а если во время работы первой программы понадобиться запускать
другую, которая с уже установленной для первой программы через alternatives
версией Java не умеет работать? Существует ли *стандартная* возможность сделать
такой вот финт ушами?

Bye!

Anatoliy Sablin

unread,
Oct 11, 2019, 11:45:02 AM10/11/19
to
Hello, Rinat H. Sadretdinow.
On 11.10.2019 15:33 you wrote:

RS> А вот как бы так бы сделать чтобы, к примеру, одна программа
RS> использовала одну версию Java, а остальные другую? Про возможность
RS> *установки* разных версий Java я знаю, про пакет alternatives тоже
RS> знаю, но тут получается что для запуска первой программы надо
RS> сначала через alternatives указать конкретную версию Java, после
RS> запускать программу, для остальных такая же последовательность,
RS> только версию Java указать через alternatives другую, а после уже
RS> программы запускать. А вот как бы обойтись без этого онанизма с
RS> каждый раз вызовом alternatives и указываения нужной версии Java?
RS> Чтобы при запуске определённой программы определённая версия Java,
RS> уже имеющаяся и установленная в системе, подсовывалась этой
RS> программе автоматом? Можно конечно "единственную особую программу"
RS> запускать через скрипт, в котором сначала вызывать alternatives,
RS> выставлять требуемую версию Java, вызывать программу, после через
RS> alternatives возвращать общую для всех остальных программ версию
RS> Java, но это как-то неаккуратненько: а если во время работы первой
RS> программы понадобиться запускать другую, которая с уже
RS> установленной для первой программы через alternatives версией Java
RS> не умеет работать? Существует ли *стандартная* возможность сделать
RS> такой вот финт ушами?

JAVA_HOME=/path/to/jvm1 $JAVA_HOME/bin/java -jar app1.jar
JAVA_HOME=/path/to/jvm2 $JAVA_HOME/bin/java -jar app2.jar

Но тут зависит от приложения. Иногда приложение идёт вместе со своей jvm и
запускается через sh-скрипт, в котором задаётся jvm. Иногда достаточно задать
нужное значение переменной JAVA_HOME. Если jvm >= 11 версии, тогда там есть
штатный механизм jlink, который для твоего приложения сформирует образ (и
включит туда только те модули, которые нужны для приложения), запускаемый через
sh-скрипт.


--
Best regards!
Posted using Hotdoged on Android

Rinat H. Sadretdinow

unread,
Oct 11, 2019, 12:10:02 PM10/11/19
to
Hello Anatoliy!

11 Oct 19 18:28, you wrote to me:

RS>> Существует ли *стандартная* возможность сделать такой вот финт ушами?

AS> JAVA_HOME=/path/to/jvm1 $JAVA_HOME/bin/java -jar app1.jar
AS> JAVA_HOME=/path/to/jvm2 $JAVA_HOME/bin/java -jar app2.jar

Значит всё же через скрипт. Задать где-то в потрохах OS путь на конкретную Java
для конкретной программы никак.

AS> Hо тут зависит от приложения. Иногда приложение идёт вместе со своей
AS> jvm и запускается через sh-скрипт, в котором задаётся jvm.

Hу тут как раз всё просто, я про приложения которые не идут со своей jvm.

У меня установлен OpenJDK 1.8.0 для всех, а вот для конкретной программы надо
минимум 12.0.1. Hо остальным чтобы оставался 1.8.0

AS> Иногда достаточно задать нужное значение переменной JAVA_HOME. Если
AS> jvm >= 11 версии, тогда там есть штатный механизм jlink, который для
AS> твоего приложения сформирует образ (и включит туда только те модули,
AS> которые нужны для приложения), запускаемый через sh-скрипт.

Т.к. в Java я разбираюсь чуть хуже чем в Python, а в Python я разбираюсь
гораздо хуже чем в Perl, а в Perl я разбираюсь намного хуже чем в балете, а в
балете я не разбираюсь вообще, то спасибо за наводку, буду смотреть.

Bye!

Anatoliy Sablin

unread,
Oct 14, 2019, 1:10:01 AM10/14/19
to
Hello, Rinat H. Sadretdinow.
On 11.10.2019 18:52 you wrote:

RS>>> Существует ли *стандартная* возможность сделать такой вот финт
RS>>> ушами?
AS>> JAVA_HOME=/path/to/jvm1 $JAVA_HOME/bin/java -jar app1.jar
AS>> JAVA_HOME=/path/to/jvm2 $JAVA_HOME/bin/java -jar app2.jar
RS> Значит всё же через скрипт. Задать где-то в потрохах OS путь на
RS> конкретную Java для конкретной программы никак.

Посмотри на desktop файлы, через них можно ещё задавать параметры запуска
приложения. Ну а так, самый надёжный способ - через скрипт и переменные
окружения.

AS>> Hо тут зависит от приложения. Иногда приложение идёт вместе со
AS>> своей jvm и запускается через sh-скрипт, в котором задаётся jvm.
RS> Hу тут как раз всё просто, я про приложения которые не идут со
RS> своей jvm. У меня установлен OpenJDK 1.8.0 для всех, а вот для
RS> конкретной программы надо минимум 12.0.1. Hо остальным чтобы
RS> оставался 1.8.0

Укажи путь до jvm явно. Как уже писал, самый универсальный и надёжный путь -
через скрипт.
Reply all
Reply to author
Forward
0 new messages