如何在Windows中设置一个很长的Java类路径?

2022-08-31 20:29:07

我正在尝试在Windows XP命令行上手动运行特定的JUnit测试,该命令行在类路径中具有异常多的元素。我尝试了几种变体,例如:

set CLASS_PATH=C:\path\a\b\c;C:\path\e\f\g;....
set CLASS_PATH=%CLASS_PATH%;C:\path2\a\b\c;C:\path2\e\f\g;....
...
C:\apps\jdk1.6.0_07\bin\java.exe -client oracle.jdevimpl.junit.runner.TestRunner com.myco.myClass.MyTest testMethod

(其他变体是将类路径全部设置在一行上,通过 -classpath 将类路径设置为 java 的参数”)。它总是归结为控制台吐出它的手,并出现以下错误:

The input line is too long.
The syntax of the command is incorrect.

这是一个JUnit测试,测试一个相当大的现有遗留项目,所以没有关于将我的目录结构重新排列到更合理的位置的建议,这些类型的解决方案现在已经出来了。我只是试图针对这个项目进行快速测试,并在命令行上运行它,而控制台正在阻碍我。帮助!


答案 1

Windows命令行在这方面非常有限。解决方法是创建一个“路径罐”。这是一个只包含一个文件的 jar,它指定了长长的 jar 列表的磁盘路径等。现在只需将此路径 jar 添加到命令行类路径即可。这通常比将实际资源打包在一起更方便。Manifest.mfClass-Path

正如我所记得的,磁盘路径可以相对于路径罐本身。所以可能看起来像这样:Manifest.mf

Class-Path: this.jar that.jar ../lib/other.jar

如果你的路径 jar 主要包含基础资源,那么它不会太频繁地更改,但你可能仍然希望在构建中的某个地方生成它。例如:

<jar destfile="pathing.jar">
  <manifest>
    <attribute name="Class-Path" value="this.jar that.jar ../lib/other.jar"/>
  </manifest>
</jar>

答案 2

从 Java 6 开始,您可以使用类路径通配符

示例:,指目录中的所有.jar文件foo/*foo

  • 这将不匹配类文件(仅 jar 文件)。要同时匹配两者,请使用:或 .顺序确定首先加载的内容。foo;foo/*foo/*;foo
  • 搜索不是递归的

推荐