6

メインメソッドを使用した春のクラスがあります。クラス内で値 applicationContext.xml を読み取ろうとしています。私の意図は、このメイン クラスを、依存する jar、プロパティ ファイル、および applicationContext.xml と共に jar することです。

しかし、unix コマンド プロンプトで jar ファイルを実行しようとすると、applicationContext ファイルが読み込まれていないようです。

applicationContext.xml は jar ファイル内に表示され、クラス内の sysout を表示できます。applicationContext.xml の読み取りに使用されるコードは次のとおりです。

ApplicationContext context = new ClassPathXmlApplicationContext(
    "classpath*:**/applicationContext.xml");

コンテキストを印刷すると、以下のメッセージが表示されます。

org.springframework.context.support.ClassPathXmlApplicationContext@89fbe3: start
up date [Mon Oct 01 15:07:43 IST 2012]; root of context hierarchy

context.getBeanDefinitionCount() を印刷しようとすると、0 が表示されます。

しかし、Eclipse経由でこれを正常に実行できます。applicationContext.xml を読み取ることができ、Bean カウントが 13 になります。

jar として実行すると機能しない理由がわかりません。コメントを手伝ってください。

4

3 に答える 3

3

どうやって .jar パッケージを入手しましたか? Eclipse エクスポート ウィザードを使用しましたか? "applicationContext.xml" を "/resources" フォルダーに配置した可能性があります。Eclipse で「Java ビルド パス」を修正してください。「/src/main/resources」フォルダーに存在する可能性のあるすべての除外タグを削除します。リソース フォルダーは、.jar パッケージ内のいくつかの xml ファイルを含むフォルダーではなく、クラスパスと見なす必要があります。それが役立つことを願っています。

于 2013-02-27T05:58:52.750 に答える
2

Spring のドキュメントからの引用(強調は私のもの):

「classpath*:」を Ant スタイルのパターンと組み合わせた場合、実際のターゲット ファイルがファイル システムに存在しない限り、パターンが開始する前に少なくとも 1 つのルート ディレクトリでのみ確実に機能することに注意してください。これは、「classpath*:*.xml」のようなパターンは、jar ファイルのルートからではなく、展開されたディレクトリのルートからのみファイルを取得することを意味します。これは、JDK の ClassLoader.getResources() メソッドの制限に起因します。これは、渡された空の文字列 (検索する潜在的なルートを示す) のファイル システムの場所のみを返します。

于 2013-02-28T21:46:46.923 に答える