0

現在Linuxを使用しており、次の形式でコマンドを実行する必要があります

java -cp .:../jarfile.jar doc.DocDump <file>

現在、フォルダー /home/noor/downloads/commands/commandDump にいるとします。どこからでもコマンドを実行する必要があるとします。以下のコマンドを試していますが、実行されていません。

私が今家にいるとします

java -cp .:/home/noor/downloads/commands/commandDump/../jarfile.jar doc.DocDump

「commands」フォルダーには jarfile.jar が含まれており、フォルダー「command」も含まれています。このフォルダーには、フォルダー「doc」が含まれており、このフォルダーにはクラス「DocDump」が含まれています。

次のエラーが表示されます。

 Exception in thread "main" java.lang.NoClassDefFoundError: Doc/DocDump
Caused by: java.lang.ClassNotFoundException: Doc.DocDump
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: doc.DocDump. Program will exit.
4

3 に答える 3

1

マニフェスト ファイルのドキュメント、特にクラスパスセクションを調べることをお勧めします。

マニフェスト ファイルで依存関係を指定すると、コマンド ラインから起動するときによりコンパクトな構文が可能になるだけでなく、現在のディレクトリではなく、メインの jar に関連するディレクトリ内のエントリを指定できます。

その場合、次の方法でアプリケーションを起動する必要があることに注意してください。

java -jar <<yourjar.jar>> <<options>>
于 2012-10-24T09:57:38.727 に答える
0

mainとして提供するクラスファイルには、ファイルパスプレフィックスは必要ありません。次のように入力するだけです。

java -cp .:/home/noor/Downloads/commands/jarfile.jar doc.DocDump <file>

仮想マシンはdoc.DocDump、クラスパス(既に指定したクラスパス)内でそのクラスを検索します。

于 2012-10-24T09:53:40.710 に答える
0

Linux では、パスで大文字と小文字が区別されます。パスには「ダウンロード」ディレクトリが含まれていますが、java コマンドでは「ダウンロード」ディレクトリを使用しています。

また、実行されるクラスは同じです:doc.DOCDumpどこでも。package.classNameクラスファイルへのパスではなく、を使用してクラスを指定します。

于 2012-10-24T09:51:57.380 に答える