В современной разработке на платформе 1С, особенно при использовании 1С:EDT (Enterprise Development Tools), часто возникает ситуация, когда на одном компьютере необходимо держать несколько версий Java. Разным версиям EDT или разным мобильным платформам могут требоваться специфические сборки JDK (Oracle, BellSoft Liberica, Axiom JDK) и конкретные мажорные версии (8, 11, 17). Разберем по шагам, как настроить среду так, чтобы каждое приложение видело именно ту версию Java, которая ему необходима.
Это классический и самый надежный метод для Windows. Вместо того чтобы прописывать одну версию Java в системных переменных окружения на уровне всей ОС, мы будем переопределять их локально для конкретного сеанса запуска. Рассмотрим пример создания стартового файла для приложения.
Создадим текстовый файл с расширением .bat и разместим его рядом с исполняемым файлом программы. Проанализируем содержимое такого файла:
set JAVA_HOME=C:\Program Files\BellSoft\LibericaJDK-11
set PATH=%JAVA_HOME%\bin;%PATH%
start "" "C:\Path\To\YourApp\program.exe"
В этом коде мы сначала устанавливаем переменную JAVA_HOME, указывая путь к корню нужной нам JDK. Затем мы добавляем путь к папке bin этой JDK в начало системной переменной PATH. Благодаря этому, когда программа запросит команду java, система первым делом найдет ее по указанному нами пути.
Поскольку 1С:EDT базируется на платформе Eclipse (где объединение модулей реализовано иначе), мы можем жестко задать путь к виртуальной машине Java в файле настроек, не меняя переменные окружения в системе вообще. Выясним, как это сделать.
В папке с установленной EDT найдем файл 1cedt.ini (или eclipse.ini). Откроем его и добавим параметр -vm. Важно помнить, что этот параметр должен идти до параметров -vmargs. Рассмотрим пример заполнения:
-vm
C:\Program Files\Java\jdk-11.0.18\bin\javaw.exe
-vmargs
...
Такой подход гарантирует, что среда разработки запустится именно на указанной версии javaw.exe, даже если в системе по умолчанию установлена Java 17 или 21.
Если вам приходится переключаться между версиями Java очень часто, ручное написание батников может стать трудоемким. Посмотрим на современные инструменты автоматизации. Для Windows отличным решением является vfox (Version Fox) или jEnv for Windows, а для Linux/macOS — SDKMAN!.
Эти инструменты позволяют устанавливать несколько JDK и переключаться между ними одной командой в консоли. Например, использование SDKMAN! выглядит так:
sdk install java 11.0.21-librc
sdk use java 11.0.21-librc
Проанализируем ситуацию с российскими дистрибутивами, такими как Axiom JDK или Liberica JDK. При работе с 1С:EDT крайне важно использовать именно те сборки, которые рекомендованы в требованиях к конкретному релизу (например, LTS-версии 11.0.x), так как минорные отличия в билдах могут влиять на корректность отрисовки графического интерфейса.
Если конфликт сред возникает на стороне сервера (например, при запуске нескольких инстансов сервера взаимодействия 1С или других Java-зависимых служб), наиболее прогрессивным методом будет контейнеризация. Мы упаковываем каждую службу вместе с необходимой ей версией Java в отдельный Docker-контейнер.
В этом случае на хостовой машине Java может вообще не быть установлена, что полностью исключает любые конфликты путей и версий. Каждое приложение работает в своем изолированном «коконе» со своими библиотеками.
При настройке нескольких сред обратим внимание на следующие моменты:
Gradle) могут некорректно обрабатывать такие пути.gradle.properties в проекте. Там можно явно указать org.gradle.java.home, чтобы сборка и Android tools работали на нужной версии Java.HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft).Таким образом, комбинируя использование JAVA_HOME в локальных скриптах запуска и прямую правку ini-файлов программ, можно добиться стабильной работы любого количества Java-приложений на одной рабочей станции.