web-dev-qa-db-ja.com

別のディレクトリからJavaプログラムを実行するにはどうすればよいですか?

マシンのどこからでも実行できるようにしたい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

同じ結果が得られます。

16
Swoogan

考えられるすべてのことを試した後、コマンドをエコーアウトして、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ソリューションで解決しましたが、スクリプトを少し変更したところ、パスの問題が再発したことに気づきませんでした。

3
Swoogan

クラスパスの例にディレクトリを追加します。

Java -classpath commandprogram CommandProgram

または

Java -classpath directory_to_program Program
24
woakas

パッケージを区切るには、スラッシュではなくドットを使用する必要があります。

Java -cp "$ CWD/classes; $ CWD/lib/AJarFile.jar" commandprogram.CommandProgram

1
cd1