当前位置:  开发笔记 > 编程语言 > 正文

如何在Windows中设置长Java类路径?

如何解决《如何在Windows中设置长Java类路径?》经验,为你挑选了3个好方法。

我正在尝试在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> Chris Noe..:

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

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

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

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


  
    
  


从1.7版开始,Ant中可用的ManifestClassPath任务可用于从Ant路径生成Class-Path属性的合适属性.

2> johnstok..:

从Java 6开始,您可以使用classpath通配符.

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

这不会匹配类文件(只有jar文件).要匹配使用:foo;foo/*foo/*;foo.该订单确定首先加载的内容.

搜索不是递归的



3> Raman..:
在Java 9+上使用“参数文件”

在Java 9+中,java可执行文件支持通过文件提供参数。参见 https://docs.oracle.com/javase/9​​/tools/java.htm#JSWOR-GUID-4856361B-8BFD-4964-AE84-121F5F6CF111。

该机制明确旨在解决OS对命令长度的限制问题:

您可以使用@argument文件来指定一个文本文件,以缩短或简化Java命令,该文本文件包含传递给java命令的参数,例如选项和类名。这使您可以在任何操作系统上创建任意长度的Java命令。

在命令行中,使用at符号(@)前缀来标识包含Java选项和类名称的参数文件。当java命令遇到以at符号(@)开头的文件时,它将将该文件的内容扩展为参数列表,就像在命令行中指定的一样。

如果您正在运行版本9或更高版本,这是“正确的”解决方案。这种机制只是修改了如何将参数提供给JVM,因此与任何框架或应用程序100%兼容,无论它们如何进行类加载,即,它完全等同于像往常一样在命令行上简单地提供参数。对于此操作系统限制的基于清单的解决方法,情况并非如此。

例如:

原始命令:

java -cp c:\foo\bar.jar;c:\foo\baz.jar

可以重写为:

java @c:\path\to\cparg

c:\path\to\cparg文件所在的位置:

-cp c:\foo\bar.jar;c:\foo\baz.jar

此“参数文件”还支持换行符和引号,以正确处理路径中的空格,例如

-cp "\
c:\foo\bar.jar;\
c:\foo\baz.jar"

摇篮

如果您在Gradle中遇到此问题,请参阅此插件,它将在Windows上执行exec或测试任务时将您的类路径自动转换为“参数文件”,并将其提供给JVM。在Linux或其他操作系统上,默认情况下不执行任何操作,尽管可以使用可选的配置值来应用转换,而与OS无关。

https://github.com/redocksoft/classpath-to-file-gradle-plugin

(免责声明:我是作者)

另请参阅此相关的Gradle问题-希望该功能最终将集成到Gradle核心中:https : //github.com/gradle/gradle/issues/1989。

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有