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