Маленькая забавность о том, как использовать все возможности 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. Но иногда бывает удобнее выслать новичку один файл, уже с прописанной строчкой компиляции, который нужно просто выполнить.
Комментариев нет:
Отправить комментарий