Tagged: bat
Код Java в bat-файле
Маленькая забавность о том, как использовать все возможности Java в обычных bat-скриптах. Или сделать скриптовый язык из Java.
Далее рассказан простой способ скомпилировать и запустить Java код, который находится внутри bat-файла.
Навеяно статьёй Код С# в bat-файле. Я реализовал тоже самое для Java. Только я не стал делать поиск папки в которую установлен JDK, т.е. в переменной %PATH% должен быть указан путь к %JDK_HOME%/bin
Не буду долго томить, вот код bat файла Test.bat:
/* copy %0 .\%~n0.java javac %~n0.java cls java %~n0 del %~n0.class del %~n0.java exit */ public class Test { public static void main(String[] args) throws Exception { System.out.println("Hello world from Java!"); System.out.println("Press Enter to exit"); System.in.read(); } }
Выполнив полученный батник увидим:
Работает это так:
- Сначала работает bat-интерпретатор. Первую строчку скрипта (комментарий Java /*) он не понимает и выдает ошибку. Но не страшно, это чисто визуальное неудобство.
- Затем мы копируем бат файл в файл с таким же именем но уже с расширением *.java, иначе компилятор javac откажется его компилировать. Выражение %~n0 вернёт имя файла без расширения: параметр 0 всегда имя файла а квалификатор n только имя файла. Следите за названием файла, поскольку имя *.java файла должно соответствовать имени класса внутри него.
- Далее компилируем консольным компилятором javac который в качестве аргумента принимает путь к файлу с исходником. В нашем случае исходник находится в теле bat-файла (строки 10–18). Текст bat-команд игнорируется, как комментарий (строки 1 и 9).
- После работы компилятора, получаем class файл, который запускаем (предварительно подчистив экран командой cls) и удаляем после завершения его работы.
- Работа bat-интерпретатора заканчивается на 8 строке (exit).
Если есть трудности с синтаксисом bat скриптов могу посоветовать хорошую статью.
Это был пример, я использую ещё немного улучшенный вариант bat файла. В случае ошибок компиляции он их выведет. Ещё также он добавит в CLASSPATH все *.jar файлы которые он найдёт рядом.
/* @echo off copy %0 .\%~n0.java cls javac -classpath CLASSPATH=.\*.jar;.\lib\*.jar %~n0.java if %ERRORLEVEL% equ 0 ( cls java %~n0 del %~n0.class ) del %~n0.java exit */ public class Test { public static void main(String[] args) throws Exception { System.out.println("Hello world from Java!"); System.out.println("Press Enter to exit..."); System.in.read(); } }
Целесообразность, скорее just for fun. Но иногда бывает удобнее выслать новичку один файл, уже с прописанной строчкой компиляции, который нужно просто выполнить.
UPD
Узнал о библиотеке Launch4j которая может превратить ваш jar файл в обычный запускаемый exe