Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何在批处理文件中引用目录中的所有jar文件_Batch File_Jar_Classpath - Fatal编程技术网

Batch file 如何在批处理文件中引用目录中的所有jar文件

Batch file 如何在批处理文件中引用目录中的所有jar文件,batch-file,jar,classpath,Batch File,Jar,Classpath,我已经创建了一个批处理文件“run.bat”: 我将所有与我的应用程序相关的类文件都保存在“app.jar”中,并且 Start是应用程序开始执行的类。我有这个“run.bat”文件和我的“app.jar”想要在同一个目录中引用的所有jar。 我将所有这些jar保存在“jars”文件夹中,并在我的“run.bat”文件中引用它,如上所示。但是,要通过我的“run.bat”引用每个jar文件,我需要将路径指定为“.\Jars\jarname.jar”。当我使用“\Jars\*.jar”时,“run

我已经创建了一个批处理文件“run.bat”:

我将所有与我的应用程序相关的类文件都保存在“app.jar”中,并且
Start
是应用程序开始执行的类。我有这个“run.bat”文件和我的“app.jar”想要在同一个目录中引用的所有jar。
我将所有这些jar保存在“jars”文件夹中,并在我的“run.bat”文件中引用它,如上所示。但是,要通过我的“run.bat”引用每个jar文件,我需要将路径指定为“.\Jars\jarname.jar”。当我使用“\Jars\*.jar”时,“run.bat”不会引用jar。
有人能提供一个替代方案吗?

实际上,您使用*.jar只完成了一半的工作。您还需要将它们作为类路径传递给java:
java-cp$classpath mypackage.mysubpackage.Start
。(在windows上,我认为在脚本中使用变量是%CLASSPATH%)


稍后编辑:看看BigMike对你的问题的评论。如果您使用的是java版本<1.6,则可能需要使用循环来构建完整的%CLASSPATH%,其中包括每个jar的全名,因为我猜Windows的shell与*nix系统不同。

您可以尝试使用for循环批量创建类路径,如下所示

@echo off
for %%jar in (.\Jars\*.jar) do call :add_jar %%jar

java -cp %CLASSPATH%;%JARS% mypackage.mysubpackage.Start
pause

exit /b

:add_jar
set JARS=%JARS%;%1
exit /b

您可以尝试以下链接中给出的内容

了解类路径通配符部分:

包含*的类路径项与类文件不匹配。若要在单个目录foo中同时匹配类和JAR文件,请使用foo;foo/*或foo/;foo。所选顺序决定了foo中的类和资源是在foo中的JAR文件之前加载,还是在foo中加载。 子目录不会递归搜索。例如,foo/只在foo中查找JAR文件,而不在foo/bar、foo/baz等中查找。”

因此,在您的情况下,您应该:

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\*
不是

set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\*.jar

假设您需要的所有JAR都存在于。\jars文件夹中

设置类路径=%CLASSPATH%。;C:\data\Ideas\tool\deliveries\webservice\batchjar;C:\data\Ideas\tool\deliveries\webservice\batchjar*


这对我很有帮助

Java无论如何都会读取%CLASSPATH%环境变量,不是吗?没错,它应该会自动读取。但是由于设置类路径可能很棘手,因此建议使用
java-cp
选项作为最佳实践。这还允许您为每个应用程序单独指定类路径,而不会影响其他现有应用程序,而修改环境变量将产生全局影响。同意Grove的观点,在Windows上处理环境变量可能是一件非常痛苦的事情(啊,我怀念旧的autoexec.bat)我想在这里你会发现更多的提示,顺便说一句,好的旧windows批处理命令也很有用(参见@BigMike关于java版本的好观点)。在linux系统中,由于文件名扩展,问题较少。不确定windows是否也进行了一些扩展+1@Grove在类似unix的系统上使用ofc命令更有意义;)+1:@guanxiaohua2k6,您应该在暂停后添加一个额外的
exit/b
,以避免在
for
循环终止后进入
add\u jar
子例程。如果所有jar都在:C:\ProgramFiles\jar(*.jar)下找到,如何包含它们?我们可以硬编码吗?
set CLASSPATH=%CLASSPATH%.;.\Jars;.\Jars\*.jar