Подтвердить что ты не робот

BAT файл для создания Java CLASSPATH

Я хочу распространять приложение из командной строки, написанное на Java в Windows.

Мое приложение распространяется как zip файл, в котором есть запись каталога lib, в которой есть .jar файлы, необходимые для вызова моего основного класса. В настоящее время для сред Unix у меня есть оболочка script, которая вызывает команду java с CLASSPATH, созданной путем добавления всех файлов в каталог lib.

Как написать файл .BAT с аналогичной функциональностью? Что эквивалентно команде find Unix в мире Windows?

4b9b3361

Ответ 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 и позволить этому подобрать все так.

Ответ 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