当从命令行通过文件中的类路径执行Java程序时,遇到了奇怪的行为。我不确定这是否与Windows,Java或cli有关。
测试类:
package de.test;
public class Playground {
public static void main(String[] args) throws Exception {
System.out.println("hello world");
}
}
编译后,我可以使用命令运行它
java -classpath "C:\Users\TEST\eclipse-workspace\Playground\target\classes" de.test.Playground
但是,如果我有一个包含内容的文件cp.txt
(这只是类路径参数)
-classpath "C:\Users\TEST\eclipse-workspace\Playground\target\classes"
我跑
java "@cp.txt" de.test.Playground
我收到错误java.lang.ClassNotFoundException: de.test.Playground
。相同,但@cp.txt
周围没有引号。
我使用Oracle JDK 11.0.2和OpenJDK 11.0.5对此进行了测试。两者都表现出相同的行为。
有人知道为什么会这样吗?每当类路径太长时,Eclipse会将其放在文件中,并使用@命令行运行该程序。但这不能如上所示。因此,每当我有太多依赖项时,我就不再能够从Eclipse中运行Java程序。
在命令行参数文件中cp.txt
escape反斜杠(\
),方法是将它们替换为双反斜杠(\\
)或使用正斜杠(/
),而不是反斜杠(\
)。
请参见The java Command - java Command-Line Argument Files:
- 因为反斜杠(
\
)是转义字符,所以必须将反斜杠字符与另一个反斜杠字符一起转义。