BAT файл для создания Java CLASSPATH
Я хочу распространять приложение из командной строки, написанное на Java в Windows.
Мое приложение распространяется как zip файл, в котором есть запись каталога lib, в которой есть .jar файлы, необходимые для вызова моего основного класса. В настоящее время для сред Unix у меня есть оболочка script, которая вызывает команду java с CLASSPATH, созданной путем добавления всех файлов в каталог lib.
Как написать файл .BAT с аналогичной функциональностью? Что эквивалентно команде find Unix в мире Windows?
Ответы
Ответ 1
Вы хотите использовать цикл for в пакетном режиме script
@echo off
setLocal EnableDelayedExpansion
set CLASSPATH="
for /R ./lib %%a in (*.jar) do (
set CLASSPATH=!CLASSPATH!;%%a
)
set CLASSPATH=!CLASSPATH!"
echo !CLASSPATH!
Это действительно помогло мне, когда я искал пакетный пакет script, чтобы перебирать все файлы в каталоге, об удалении файлов, но это очень полезно.
Однострочный пакет script для удаления пустых каталогов
Честно говоря, используйте Jon Answer, хотя, гораздо лучше, если все файлы находятся в одном каталоге, это может помочь вам в другое время, хотя.
Ответ 2
Почему вы используете find? Предположительно, вы знаете все библиотеки, которые требуется вашему файлу jar досрочно, так почему бы просто не перечислить их?
В качестве альтернативы вы всегда можете использовать -Djava.ext.dirs=lib
и позволить этому подобрать все так.
Ответ 3
Начиная с версии 6.0, Java поддерживает шаблоны классов подстановочных знаков.
Синтаксис командной строки командной строки Java
Ответ 4
Если вы хотите, чтобы параметр CLASSPATH удерживался за пределами script, и вы не запустили оболочку с помощью /V, вы можете сделать что-то вроде этого:
@echo off
FOR /R ./lib %%a in (*.jar) DO CALL :AddToPath %%a
ECHO %CLASSPATH%
GOTO :EOF
:AddToPath
SET CLASSPATH=%1;%CLASSPATH%
GOTO :EOF
Полезно для настройки вашей среды, когда вы просто играете в командной строке.
Ответ 5
Звучит как исполняемый JAR может работать на вас. Если вы распространяете ZIP со всеми JAR, необходимыми для вашей основной подпрограммы, и вы действительно выполняете его в командной оболочке, возможно, вы можете создать исполняемый JAR с Main-Class и Classpath, определенными в манифесте. Все ваши пользователи должны сделать двойной клик на JAR и Боб вашего дяди.
Ответ 6
SET CLASSPATH=""
FOR /R /lib %%a in (*.jar) DO CALL :AddToPath %%a
echo %CLASSPATH%
java -cp %CLASSPATH% com.a.b.MyClass
pause
:AddToPath
SET CLASSPATH=%1;%CLASSPATH%
GOTO :EOF
Ответ 7
Что я делаю, когда я выпускаю JAR для командной строки для Windows/Linux, это встроить все JAR-библиотеки внутри JAR с помощью команды ANT:
<fileset dir="${module.classes.dir}"/>
<zipfileset src="${endorsed.lib.dir}/myLibrary.jar"/>
Таким образом, библиотеки тают вместе с вашими файлами классов.
Это не лучший способ повторного использования двоичных файлов, но если библиотеки не так тяжелы, вы выполняете свое приложение, просто вызывая java -jar myApp.jar в любой ОС.
Ответ 8
Вы можете использовать бит по-другому, если вы используете Maven для создания своего проекта.
Приложение Assembler Maven Plugin предназначен для создания пусковых установок приложений Java. Этот плагин создает для вас пусковую установку bat файлов и устанавливает зависимости в указанной папке. При желании вы запускаете приложение для регистрации в качестве службы\демон.
Это тема об использовании
Этот подключаемый модуль помогает сохранить ваши части CM вашего проекта DRY.
Ответ 9
Есть ли более простой способ сделать это?
Да;
Начиная с версии 6, вы можете использовать групповые маски классов.
javac -cp .;../lib/* yourJavaCodeDir/YourJavaFile.java
См. также этот Q & A.
Ответ 10
Возможность сделать вещи переносимыми - это установить путь к классу относительно местоположения самого командного файла.
В Windows (предполагая Java 6+, классы в. /bin, jars в. /lib ):
@java -classpath %~dp0/bin;%~dp0/lib/* ClassName %1