我创建了一个批处理文件“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”不会引用罐子。
任何人都可以为它提供替代方案吗?
答案 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 *
这对我有帮助