5

我创建了一个批处理文件“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”想要在同一个目录中引用的所有 jar。
我将所有这些 jar 保存在“Jars”文件夹中,并在我的“run.bat”文件中引用它,如上所示。但是,要通过我的“run.bat”引用每个 jar 文件,我需要将路径指定为“.\Jars\jarname.jar”。当我使用“.\Jars\*.jar”时,“run.bat”不会引用这些罐子。任何人都可以提供替代方案吗?

4

4 回答 4

2

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

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

于 2012-06-21T07:22:58.593 回答
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
于 2012-06-21T08:03:14.940 回答
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 等中查找。

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

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

不是

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

前提是您需要的所有罐子都存在于 .\Jars 文件夹中

于 2016-05-05T06:56:17.220 回答
0

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

这对我有帮助

于 2020-10-05T07:15:30.030 回答