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

时间:2012-06-21 04:15:14

标签: batch-file jar classpath

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

set CLASSPATH=%CLASSPATH%.;.\Jars\app.jar;.\Jars\a.jar;.\Jars\b.jar;.\Jars\c.jar;.\Jars\d.jar;
java mypackage.mysubpackage.Start
pause

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

您可以尝试使用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

答案 2 :(得分:1)

您可以尝试以下链接http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html

中提供的内容

了解类路径通配符部分:

  

"包含*的类路径条目与类文件不匹配。要在单个目录foo中匹配类和JAR文件,请使用foo; foo / *或foo / ; foo。选择的顺序确定foo中的类和资源是否在foo中的JAR文件之前加载,反之亦然。   不会递归搜索子目录。例如,foo / 仅在foo中查找JAR文件,而不是在foo / bar,foo / baz等中查找JAR文件。"

所以在你的情况下你应该这样做:

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

.filter()

如果您需要的所有罐子都存在于。\ Jars文件夹

答案 3 :(得分:0)

设置CLASSPATH =%CLASSPATH%.; C:\ data \ Ideas \ tool \ Deliverables \ webservice \ batchjar; C:\ data \ Ideas \ tool \ Deliverables \ webservice \ batchjar *

这对我有帮助