メインを持つJavaクラスがあり、コマンドラインからスタンドアロンアプリとして実行していました。
java -jar myjar.jar params
Apache で実行するコードを再パッケージ化する必要があり、古い jar のエントリ ポイント クラスを含むすべてのコードが、Web サーバーに簡単にデプロイできるように WAR ファイルになりました。
ただし、コマンドラインから実行できるようにしたいのですが、コードは変更されておらず、すべてそこにあります。実行する方法がわかりません。
これが私が試したことです...
WARはただの瓶だと思っていたので、
java -jar mywar.war params
マニフェストにメインクラスが定義されていないと言って失敗しました。
手動でマニフェストを戦争に追加して再試行しましたが、同じ結果が得られました。
私の戦争では、manifest.mf を含む META-INF というフォルダーがあることに気付いたので、通常のマニフェストと同様に、メイン クラスを宣言する行をそのフォルダーに追加しました...
Manifest-Version: 1.0
Main-Class: mypackage.MyEntryPointClass
これはnoClassDefFoundError mypackage.MyEntryPointClass
ある種の進歩である を与えました。それは単なるパスの問題であると私に信じさせたので、私は試しました
Manifest-Version: 1.0
Main-Class: WEB-INF.classes.mypackage.MyEntryPointClass
同じエラーが発生しましたが、スタックトレースがあります...
Exception in thread "main" java.lang.NoClassDefFoundError: WEB-INF/classes/mypackage/MyEntryPointClass (wrong name: mypackage/MyEntryPointClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
私は少しグーグルで調べましたが、私の質問に答えるものは何も見つかりませんでした.ここでいくつかの他の質問を読みました.
Java 1.5、それで違いが生じるとは思いません。