1

私のウェブサイトは、ubuntu の Apache でホストされています。内部に 2 つのフォルダーといくつかの .class および .scc ファイルを含む JAR ファイルが提供されました。jar ファイル名 = myJarfile、このアーカイブ内のフォルダー = myFolder、およびこのフォルダー内のクラス = myClass としましょう。

次のようにクラスを実行するように言われました。

java myFolder.myClass

しかし、私はこのエラーが発生します:

$ java myFolder.myClass 
Exception in thread "main" java.lang.NoClassDefFoundError: myFolder/myClass
Caused by: java.lang.ClassNotFoundException: esGateKeeper.cookieServer
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: myFolder/myClass.  Program will exit.

私も試しました:

$ java myJarfile.myFolder.myClass
Exception in thread "main" java.lang.NoClassDefFoundError: myJarfile/myFolder/myClass
Caused by: java.lang.ClassNotFoundException: myJarfile.myFolder.myClass
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: myJarfile.myFolder.myClass.  Program will exit.

管理者は、それが CLASSPATH の問題であると私に言いました。何も思いつきません。私のウェブサイトでは、PERL CGI を使用しており、JAVA はまったく使用していません。私は Java プログラマーではありません。グーグルで調べても、これを実行する方法がわかりませんでした。

クラス/または JAR ファイルは、認証のために、PERL CGI から通信するローカルホストで IPC デーモンを開始することになっています。ブラウザから取得した Cookie を復号化します。

これを実行するためにサーバーに何をインストールする必要があるかわかりません。私は以下のようにJavaを持っています:

$ java -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) Client VM (build 17.0-b16, mixed mode, sharing)

アドバイスお願いします。

タイ。ラジーヴ

_ OK __ .jar ファイルを指す CLASSPATH 変数をエクスポートすることで、これを解決しました。

export CLASSPATH="/full/path/to/myJarfile.jar"

その後、正常に実行されます:

$ java myFolder.myClass

デーモンを起動します....

しかし、正直なところ、ここで何が起こっているのかわかりません。この .jar ファイルには、myFolder と META-INF の 2 つのフォルダーがあります。myFolder には、多数の .class ファイルと 1 つの .scc ファイルがあります。それらのどれも「メイン」と名付けられていません....

時間と助けが私に差し伸べられたことに感謝します。

タイ。ラジーヴ

4

1 に答える 1

0

「-jar」フラグを「java」に追加してみてください。

「jar」ファイルがスタンドアロンプ​​ロセスを作成すると仮定すると、launchコマンドを/etc/rc.localに追加することにより、起動時に開始するようにJavaプロセスを設定できます。重要なサービスである場合は、それが実行されていることを確認するために監視し、手動で停止および開始する準備をすることもできます。ハングしている、または実行されていないことを検出した場合は、自動的に再起動することも検討してください。

Perlからアクセスする限り、そこからそれを与えた人からドキュメントを入手する必要があります。ポート上で実行するか、接続可能なソケットを作成することを期待しています。どちらの場合でも、それがJavaアプリであるかどうかは問題ではありません。ポートまたはソケットに接続するためのPerlの標準的な方法が適用されます。

クラスパスについては、まだ読んでいない場合は、クラスパスのドキュメントを読むことをお勧めします。最適なバリエーションについて疑問がある場合は、JARファイルプロバイダーに確認を依頼してください。

以下も参照してください。

于 2012-08-07T16:17:26.630 に答える