无法在文件中使用类路径并在cli上使用@来运行Java程序

问题描述 投票:0回答:1

当从命令行通过文件中的类路径执行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程序。

java eclipse command-line-interface
1个回答
0
投票

命令行参数文件中cp.txtescape反斜杠(\),方法是将它们替换为双反斜杠(\\)或使用正斜杠(/ ),而不是反斜杠(\)。

请参见The java Command - java Command-Line Argument Files

  • 因为反斜杠(\)是转义字符,所以必须将反斜杠字符与另一个反斜杠字符一起转义。
© www.soinside.com 2019 - 2024. All rights reserved.