Невозможно запустить java программу с classpath в файле и использованием @ на кли - PullRequest
1 голос
/ 09 января 2020

Я столкнулся со странным поведением при выполнении программы 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)

-classpath "C:\Users\TEST\eclipse-workspace\Playground\target\classes"

, и я запускаю

java "@cp.txt" de.test.Playground

I получите ошибку java.lang.ClassNotFoundException: de.test.Playground. То же без кавычек вокруг @cp.txt.

Я проверял это с Oracle JDK 11.0.2 и OpenJDK 11.0.5. Оба показывают одинаковое поведение.

Кто-нибудь знает, почему это происходит? Когда путь к классу слишком длинный, Eclipse помещает его в файл и использует командную строку @ для запуска программы. Но это не работает, как показано выше. Поэтому, когда у меня слишком много зависимостей, я больше не могу запускать программу Java из Eclipse.

1 Ответ

2 голосов
/ 09 января 2020

В вашем файле аргументов командной строки cp.txt экранирование обратной косой черты (\) путем замены их двойной обратной косой чертой (\\) или используйте обратную косую черту (/) вместо обратной косой черты (\).

См. Команда java - java Файлы аргументов командной строки :

  • Поскольку backsla sh (\) является escape-символом, символ backsla sh должен быть экранирован другим символом backsla sh.
...