Хорошо закодированный командный файл - хорошее решение для простого запуска приложения Java.
Вот пример с некоторыми строками комментариев:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
title MyProgram
if "%~1" == "/?" goto ShowHelp
rem Try to find java.exe in current folder or any folder defined in
rem environment variable PATH as Windows command interpreter would do.
set "SearchPath=%CD%;%PATH%"
set "SearchPath=%SearchPath:)=^)%"
set "SearchPath=%SearchPath:\;=;%"
for /F "delims=" %%I in ('echo %SearchPath:;=^&ECHO %') do (
if exist "%%~I\java.exe" (
set "JavaPath=%%~I"
goto RunMyProgram
)
)
echo %~dpn0
echo.
echo Error: Failed to find java.exe in current folder or
echo any folder defined in environment variable PATH.
:GetJavaPath
echo.
echo Please enter path to folder with java.exe.
echo.
echo Enter nothing to exit if Java is not installed at all.
echo.
set "JavaPath="
set /P "JavaPath=Path to java.exe: "
rem Has the user entered a folder path at all?
if "!JavaPath!" == "" goto BatchExit
rem Remove all double quotes from entered folder path.
set "JavaPath=!JavaPath:"=!"
rem Replace all/by \ in entered folder path.
set "JavaPath=!JavaPath:/=\!"
rem If there is a backslash at end, remove this backslash.
if "!JavaPath:~-1!" == "\" set "JavaPath=!JavaPath:~0,-1!"
rem Does java.exe exist in entered folder path?
if exist "!JavaPath!\java.exe" goto RunMyProgram
echo.
echo There is no java.exe in entered folder.
goto GetJavaPath
:ShowHelp
echo For using this application ...
echo.
pause
goto BatchExit
:RunMyProgram
echo.
"%JavaPath%\java.exe" -cp "%~dp0MyProgram.jar" %*
:BatchExit
endlocal
Вся партия код использует свою собственную среду, определенную с SETLOCAL и Endlocal. Прочтите ответ на change directory command cd ..not working in batch file after npm install для получения подробного объяснения, что делают эти две команды.
В третьей строке указано название консольного приложения, которое должно быть отредактировано в соответствии с тем, что, по вашему мнению, будет хорошо для вашего Java-приложения.
Стандартный параметр для получения справки по командному или консольному приложению в Windows работает с параметром /?
. Поэтому код партии проверяет, равен ли первый параметр /?
, и в этом случае выводит помощь, которую вы должны написать для своего приложения под меткой ShowHelp
.
Далее командный файл ищет в текущем каталоге и во всех каталогах, определенных в переменной окружения PATH
для java.exe
. Ожидается, что исполняемый файл Java можно будет найти автоматически, и поэтому ваше приложение Java может быть выполнено следующим образом без какого-либо взаимодействия с пользователем. Эта часть кода представляет собой слегка измененную версию кода, написанную Magoo в его ответе на Find the path used by the command line when calling an executable.
Но если java.exe
не удалось найти автоматически, выводится имя командного файла с полным путем, чтобы сообщить пользователю, какое приложение печатает сообщение об ошибке, а также следующее сообщение об ошибке.
Пользователь имеет возможность ввести вручную или перетащить путь в папку, содержащую java.exe
.
Нажатием только RETURN или ENTER пользователь может выйти из пакетного файла в случае признания того, что Java не установлена на всех, и, следовательно, приложение Java не может быть использован этим пользователем.
В противном случае возможно окружающий двойные кавычки удаляются из введенного пути к папке, прямые косые черты заменяются обратными косыми чертами, как многие пользователи используют /
вместо \\
на Windows, по ошибке, и последний символ введенного пути к папке также удаляются в случае пути к папке заканчивается обратным слэшем.
Следующая страница проверяется, если java.exe
действительно существует в папке, введенной пользователем.
Примечание: В случае пользователь вводит, например "\"
переменная окружения JavaPath
больше не существует на проверки существования файла, но это не имеет никакого значения. Введенный путь к папке ссылается на замедленное расширение, чтобы предотвратить выход из обработки пакетного файла из-за синтаксической ошибки в случае, если пользователь допустил ошибку ввода при вводе пути к папке, что приведет к немедленному расширению переменной в синтаксической ошибке.
Ожидается, что этот командный файл MyProgram.jar
находится в том же каталоге, что и сам командный файл. %~dp0
ссылается на диск и путь к пакетному файлу. Эта строка всегда заканчивается обратным слэшем, что является причиной отсутствия обратной косой черты между %~dp0
и MyProgram.jar
.
%~dp0MyProgram.jar
заключен в двойные кавычки, потому что пользователь мог извлечь ваше приложение Java и пакетный файл в папку, имя или путь которой содержит 1 или даже больше пробелов.
%*
ссылается на все аргументы (параметры, параметры), переданные пакетному файлу для пересылки их в ваше Java-приложение.
Чтобы понять используемые команды и как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
call /?
... %~1
объясняет, %~dp0
, %dpn0
и %*
echo /?
endlocal /?
for /?
goto /?
if /?
pause /?
rem /?
set /?
setlocal /?
title /?
Запуск процесса Java без вызова 'java' где-то звучит не удалось мне. –
Возможно, если вы установите программу по умолчанию для открытия файла jar в java или скрипта на уровне ОС. Но это не переносится на другие компьютеры, где вам нужно продолжить ту же конфигурацию. –
Да создайте командный файл или командный файл. Или вы делаете исполняемый JAR-файл, чтобы вы могли дважды щелкнуть по нему. http://stackoverflow.com/questions/5258159/how-to-make-an-executable-jar-file –