マシンのどこからでも実行できるようにしたいJavaプログラムがあります。 Cygwinコマンドプロンプトから実行したいと思います。 Javaプログラムを呼び出すスクリプトを作成しました。 Javaプログラムの場所をクラスパスに追加しました。スクリプトは、Javaプログラムのディレクトリから実行すると機能します。ただし、他のディレクトリから実行しようとすると、次のようになります。
Java.lang.NoClassDefFoundError: commandprogram/CommandProgram
これは私のスクリプトです:
#!/bin/sh
CWD=`dirname "$0"`
Java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram
Java行を次のように変更します。
Java -cp "$CWD/classes;$CWD/classes/commandprogram;$CWD/lib/AJarFile.jar" CommandProgram
同じ結果が得られます。
考えられるすべてのことを試した後、コマンドをエコーアウトして、CygwinパスとWindowsパスが混在していることを確認しました。解決策は、スクリプトを次のように変更することでした。
#!/bin/sh
CWD=`dirname "$0"`
CWD=`cygpath -w "$CWD"`
Java -cp "$CWD/classes;$CWD/lib/AJarFile.jar" commandprogram/CommandProgram
その後、CWDは「/ cygdrive/c/Program\Files/...」ではなく「C:\ ProgramFiles\...」に変更されました。
以前にこの問題に遭遇し、cygpath -w
ソリューションで解決しましたが、スクリプトを少し変更したところ、パスの問題が再発したことに気づきませんでした。
クラスパスの例にディレクトリを追加します。
Java -classpath commandprogram CommandProgram
または
Java -classpath directory_to_program Program
パッケージを区切るには、スラッシュではなくドットを使用する必要があります。
Java -cp "$ CWD/classes; $ CWD/lib/AJarFile.jar" commandprogram.CommandProgram