Вопрос или проблема
У меня на ПК установлены JDK 8, 17 и 21, но основная версия — это JDK-21. Мне нужно запустить сервер на устаревшей версии PaperMC, и возможно ли как-то сделать так, чтобы JDK-8 использовалась только для этого PaperMC вместе со start.bin (Windows) или start.sh (Linux)?
Вот пример, который я использовал, и он некорректен. Я не отрицаю, что, возможно, где-то допустил ошибку, и хотел бы получить помощь и разъяснения.
start.bin (Windows)
@echo off
java -jar "C:\Program Files\Java\jre1.8.0_431\bin\java.jar"
java -Xmx3G -jar paper-1.13.2-657.jar
PAUSE
Консоль на paper-1.13.2-657
Ошибка: невозможно получить доступ к jar-файлу C:\Program Files\Java\jdk-21\bin\java
Обнаружена неподдерживаемая версия Java (65.0). Поддерживаются только версии до Java 12.
Правильное использование:
@echo off
"C:\Program Files\Java\jre1.8.0_431\bin\java.exe" -Xmx3G -jar paper-1.13.2-657.jar
PAUSE
Ответ или решение
Одной из распространенных проблем, с которыми сталкиваются IT-специалисты при работе с устаревшими версиями программного обеспечения, является необходимость совмещения современных инструментов с устаревшими системами. В вашем случае, проблема заключается в невозможности запуска старой версии PaperMC с использованием JDK 8, в то время как основная версия JDK на вашем компьютере — JDK 21.
Теоретическая часть (Theory)
Java Development Kit (JDK) включает в себя необходимые инструменты для компиляции, отладки и запуска Java-программ. Каждая версия JDK может иметь свои специфики и несовместимости, особенно когда речь идет о новых функциях и методах, которые могут отсутствовать в более ранних версиях. PaperMC, являясь программой на Java, будет зависеть от определенной версии JDK, в пределах которой он был разработан и протестирован.
В вашем случае, правильно заметить, что инициализация PaperMC через JDK 21 вызывает ошибку из-за неподдерживаемых функций или классов, появившихся после Java 12. Следовательно, необходимо убедиться, что JDK 8 используется именно для запуска данной программы.
Пример (Example)
Проанализируем пример, который вы представили. Из вашей первой попытки:
@echo off
java -jar "C:\Program Files\Java\jre1.8.0_431\bin\java.jar"
java -Xmx3G -jar paper-1.13.2-657.jar
PAUSE
Эта команда пытается запустить java.jar
, однако это неправильно, поскольку необходимо явно указать путь к исполняемому файлу java.exe, который находится в папке вместе с установленной JDK 8. Ошибка, возникающая из-за этого, связана с попыткой использования неправильной версии JDK. Консольная ошибка указывает, что запускается JDK 21:
Error: Unable to access jarfile C:\Program Files\Java\jdk-21\bin\java
Unsupported Java detected (65.0). Only up to Java 12 is supported.
Применение (Application)
Для решения данной проблемы, необходимо явно указывать путь к версии JDK 8, которую следует использовать для запуска PaperMC. Это достигается путем редактирования вашей команды следующим образом:
@echo off
"C:\Program Files\Java\jre1.8.0_431\bin\java.exe" -Xmx3G -jar paper-1.13.2-657.jar
PAUSE
Почему это работает? Вы указываете конкретный путь к java.exe JDK 8, тем самым обходитесь без использования системной переменной PATH, которая может указать на другую, более новую версию JDK.
Алгоритм действий:
- Определите правильный путь к JDK 8: Вам необходимо знать точный путь, где установлена версия JDK 8. Это помогает избежать путаницы с другими версиями, установленными на вашем ПК.
- Измените командный файл (start.bin): Убедитесь, что путь к исполняемому файлу
java.exe
JDK 8 указан в двойных кавычках, что защитит от проблем, связанных с пробелами в пути. - Тестируйте выполнение: После изменения командного файла выполните его, наблюдая за выводом в консоли. Это позволит убедиться, что PaperMC запускается с использованием требуемой версии JDK.
Заключение
Проблема с несовместимостью версий JDK и устаревшими программами, такими как PaperMC, требует внимательного подхода и знаний о том, как Java взаимодействует с системной конфигурацией. Основное преимущество, которое дает явное указание версии JDK, заключается в точной настройке окружения для каждой отдельной задачи, которая может быть необходима в большом количестве сценариев в корпоративной среде.