3

ビルドした Java プログラムを実行しようとしていますが、特定のディレクトリから実行したいと考えています。実行したいクラスファイルへの相対パスを指定すると、そのパスにはピリオドが含まれるディレクトリが含まれており、Java が起動しているようです。たとえば、私は実行しようとします:

java -classpath myPath/myPath-1.2.3/myLongPath myPath/myPath-1.2.3/myLongPath/myProg

クラスが見つからないという Java エラー (NoClassDefFoundError)。これは理にかなっています。Java が指定したディレクトリとは別のディレクトリを探していることがわかるからです。探している場所: myPath/myPath-1/2/3/myLongPath の代わりに: myPath/myPath-1.2.3/myLongPath

調べたいディレクトリにピリオドが含まれていることをjava.exeに指定する方法がわかりません。\ ピリオドをエスケープしようとしましたが、うまくいきません。以前にこの問題に遭遇した人はいますか? ところで、私は gnome ターミナル内で Linux を実行しています。助けてくれてありがとう。

4

2 に答える 2

8

java への呼び出しの最後のパラメーターは、実行するクラスの名前です。これはファイル名ではなく、クラス名です。ドット (スラッシュではない) で区切られた完全なパッケージ名 (クラスがデフォルト パッケージにない場合) が含まれます。クラス名にもパッケージ名にもドットを含めることはできません。パッケージへのパスを表すフォルダーは、クラスパスに含まれるディレクトリに含まれていてはなりません (クラス フォルダーの最上位ディレクトリのみが含まれている必要があります)。

あなたの場合、それはただmyProgのように見えますが、念のため、main メソッドを持つクラスのクラス名 (パッケージ名を含む) は何ですか?

例:

クラスmypackage.mysubpackage.MainClassがあり、クラス ファイルが に/home/me/project/1.3/build/mypackage/mysubpackage/MainClass.classある場合、クラスを実行するコマンドは になりますjava -cp /home/me/project/1.3/build mypackage.mysubpackage.MainClass

于 2010-02-18T08:42:42.703 に答える
0

Java はピリオドをパッケージ コンポーネントの区切り記号として使用するため、クラス名にピリオドを使用することはできません。クラス名はディレクトリ構造に結び付けられているため、クラスパスで使用されるディレクトリ名にも表示されず、そこではいくらエスケープしても役に立ちません。(ディレクトリ セパレーター自体をパッケージ コンポーネント セパレーターとして使用する方がよいでしょうが、それらはオペレーティング システムによって異なり、Java は OS に依存しないことを望んでいました。これは、そのために支払われるべき代償の 1 つです。)

于 2010-02-18T08:45:41.950 に答える