1

うまく機能するSpringフレームワークを使用したWebアプリケーションがあります。Maven で構築されたスタンドアロン アプリケーションで同じスプリング コンテキストを使用しようとします。eclipse 内でアプリケーションを起動することにより、コンテキストを取得することができました。メイン クラスは、次の行で Spring コンテキストをインスタンス化します。

ApplicationContext ap = new ClassPathXmlApplicationContext("spring/applicationContext.xml");

しかし、maven で jar を作成し、コマンド ラインで起動すると、エラーが発生します。コマンドラインは次のとおりです。

java -jar application.jar

jar には、maven-jar-plugin によって生成されたクラスパスを定義する META-INF が含まれています。

このエラーで最初のスプリングが失敗しました

Unable to locate NamespaceHandler when using context:annotation-config 

Maven Spring jar からのさまざまな spring.handler ファイルをマージし、その結果を application.jar に入れることで問題を解決しました。これはこの問題の一般的な解決策ですが、これはスタンドアロン モードでは失敗したが、Web アプリと Eclipse では機能した理由を説明していません。Eclipse とスタンドアロンは同じコードを使用します (Java および Spring 構成ファイル)。

現在、2 つ目の問題に直面しています。一部の Bean のインスタンス化が失敗します。一部の Bean は XML で宣言され、他の一部の Bean は注釈で宣言されています。注釈付きで宣言された Bean はスタンドアロン モードではインスタンス化されず、コンストラクターのトレースがそれを示しているため、これらの Bean を参照する XML Bean のインスタンス化は失敗します。この問題はまだ解決していません。

Eclipse またはスタンドアロン モードで異なる動作が見られる理由がわかりません。何が違いを説明できますか? Eclipse はどのように Java を呼び出しますか、どのようにクラスパスを設定しますか?

返信ありがとう、ミカエル

4

0 に答える 0