CLI上のファイルにクラスパスと@の使用でJavaプログラムを実行することができません。

T3rm1:

ファイルにクラスパスを指定して、コマンドラインから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と11.0.5のOpenJDKでこれをテストしました。どちらも同じ挙動を示します。

これがなぜ起こるか誰でも知っていますか?クラスパスが長すぎるときはいつでも、Eclipseは、ファイルにそれを置くと、プログラムを実行するために、@コマンドラインを使用しています。上記のようにしかし、これは動作しません。私はあまりにも多くの依存関係を持っている時はいつでもだから私はもはや、Eclipse内からJavaプログラムを実行することができますよん。

howlger:

あなたには、コマンドライン引数ファイルの cp.txt エスケープバックスラッシュ(\)ダブルバックスラッシュ(に置き換えることによって\\)またはスラッシュ(使用/)の代わりに、バックスラッシュを(\)。

参照してくださいjavaのコマンドを- javaのコマンドライン引数のファイル

  • バックスラッシュ(ので\)エスケープ文字で、バックスラッシュ文字は、他のバックスラッシュ文字でエスケープする必要があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=364209&siteId=1