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のコマンドライン引数のファイル:
- バックスラッシュ(ので
\
)エスケープ文字で、バックスラッシュ文字は、他のバックスラッシュ文字でエスケープする必要があります。