BAT文件来创buildJava CLASSPATH
我想在Windows上分发用Java编写的命令行应用程序。
我的应用程序是作为一个zip文件分发的,它有一个lib目录条目,它具有调用我的主类所需的.jar文件。 目前,对于Unix环境,我有一个shell脚本,通过在lib目录中附加所有文件创build一个CLASSPATH来调用java命令。
如何编写具有类似function的.BAT文件? 在Windows世界中findUnix命令的等价物是什么?
您想要在批处理脚本中使用for循环
@echo off setLocal EnableDelayedExpansion set CLASSPATH=" for /R ./lib %%a in (*.jar) do ( set CLASSPATH=!CLASSPATH!;%%a ) set CLASSPATH=!CLASSPATH!" echo !CLASSPATH!
当我正在寻找一个批处理脚本遍历目录中的所有文件时,这真的帮了我很大的忙,它是关于删除文件,但是非常有用。
一行批处理脚本删除空目录
说实话,使用乔恩的答案,尽pipe如果所有的文件都在一个目录,这可能会帮助你在另一个时间好多了。
你为什么要用find? 大概你提前知道你的jar文件需要的所有库,那么为什么不把它们列出来呢?
或者,您可以始终使用-Djava.ext.dirs=lib
,让它拾取所有的东西。
从6.0开始,Java支持通配符类path。
Java命令行类path语法
如果您希望将CLASSPATH设置保持在脚本之外,并且您没有使用/ V启动shell,则可以这样做:
@echo off FOR /R ./lib %%a in (*.jar) DO CALL :AddToPath %%a ECHO %CLASSPATH% GOTO :EOF :AddToPath SET CLASSPATH=%1;%CLASSPATH% GOTO :EOF
当您在命令行中玩耍时,对设置您的环境非常有用。
听起来像一个可执行的JAR可以为你工作。 如果你正在发布一个包含主例程需要的所有JAR的ZIP文件,并且你真的在一个命令行程序中执行它,也许你可以用清单中定义的Main-Class和Classpath创build一个可执行的JAR文件。 你所有的用户只需要双击JAR,Bob就是你的叔叔。
SET CLASSPATH="" FOR /R /lib %%a in (*.jar) DO CALL :AddToPath %%a echo %CLASSPATH% java -cp %CLASSPATH% com.abMyClass pause :AddToPath SET CLASSPATH=%1;%CLASSPATH% GOTO :EOF
当我为Windows / Linux发布命令行JAR时,我所做的是使用ANT命令将所有JAR库embedded到我的JAR中:
<fileset dir="${module.classes.dir}"/> <zipfileset src="${endorsed.lib.dir}/myLibrary.jar"/>
通过这种方式,图书馆与您的class级文件融合在一起。
这不是二进制可重用性的最佳方式,但是如果库不那么重,那么只需在任何操作系统中调用java -jar myApp.jar即可执行应用程序。
如果您使用Maven构build您的项目,您可以使用一些不同的方法。 应用程序组装者Maven插件用于创buildJava应用程序启动器。 这个插件为你生成bat文件启动器,并把依赖放在指定的文件夹中。 可选的,你的启动器能够注册你的应用程序作为服务\恶魔。
这是使用它的一个主题
这个插件有助于保持项目的CM部分干爽。
有没有更简单的方法来做到这一点?
是;
从版本6开始,您可以使用类path通配符。
javac -cp .;../lib/* yourJavaCodeDir/YourJavaFile.java
另请参阅相关的问答。
使事情变得可移植的一个选项是设置相对于batch file本身位置的类path。
在Windows中(假定Java 6+,./bin中的类,./lib中的jar):
@java -classpath %~dp0/bin;%~dp0/lib/* ClassName %1