2012-10-01 6 views
5

としてばねクラスの実行時applicationContext.xmlをを読み取ることができません。クラス内で値applicationContext.xmlを読み取ろうとしています。私の意図は、依存するjar、プロパティファイル、およびapplicationContext.xmlとともにこのメインクラスをjarすることです。私は、UNIXのコマンドプロンプトを経由してjarファイルを実行しようとすると、ApplicationContextのファイルが読み込まなっていないようIメインメソッドとスプリングクラスが実行可能なJAR

はしかし、それが見えます。私はそれが私に与えている文脈を印刷するとき

applicationContext.xmlをは、jarファイル内見てapplicationContext.xmlをを読み取るために使用私のclass.Theコード内sysoutsを見ることができるよさは

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

です以下のメッセージ。

org[email protected]89fbe3: start 
up date [Mon Oct 01 15:07:43 IST 2012]; root of context hierarchy 

私はcontext.getBeanDefinitionCountを印刷しよう

() - それは私に0

を与えます。しかし成功し、これは日食を通じてexcuteすることができています。機能しない理由私はあなたのコメントで私を助けてjar.Pleaseとして、それを実行したときに13

わからないよう私に豆の数を与えるapplicationContext.xmlをしてを読むことができることが可能です。

+0

jarファイルは単なるzipファイルです。解凍して調べてみてください。アプリケーションコンテキストはそこにありますか?期待した内容が含まれていますか? – Pace

+0

はい、私は解凍されていて、内部でapplicationContextを見ることができます。でも、まだ値を取り上げていません。 – raga

+0

jarファイルにapplicationContext.xmlは1つだけありますか?クラスパスにapplicationContext.jarも含まれている可能性のある他のjarファイルはありませんか? – Pace

答えて

1

どのようにしての.jarパッケージを取得しましたか? Eclipseエクスポートウィザードを使用しましたか? "/ resources"フォルダに "applicationContext.xml"を入れている可能性があります。 Eclipseで "Java Build Path"を修正してください。 "/ src/main/resources"フォルダにある除外タグをすべて削除します。リソースフォルダは、.jarパッケージ内のいくつかのxmlファイルを含むフォルダだけでなく、クラスパスと見なす必要があります。希望が役立ちます。

2

Spring documentation(強調鉱山)からの引用:

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

-1

私は同じ問題で苦労しています。 Eclipseの内部からアプリケーションを正常に実行できますが、実行可能なjarとしてエクスポートすると失敗します。

私はでこの問題を回避していた:Eclipseのビルド・パスの画面に行くと/resourcesフォルダにフィルタを削除

  1. 。これは.jarファイルのトップレベルに/resources下にあるMETA-INFフォルダとその内容を置くために輸出を引き起こします。
  2. アプリケーションコンテキストパスからのすべてのワイルドカードを削除します。

    applicationContext = new ClassPathXmlApplicationContext( "classpath*:META-INF/spring/applicationContext*.xml");

    ​​

になった私は、これはEclipse環境との間のクラスローダでいくつかの違いによるものであると確信している私Windows Java環境。それを解決する方法を理解することは、次の作業になります。

+0

新しい質問がある場合は、[質問する](http://stackoverflow.com/questions/ask)ボタンをクリックして質問してください。コンテキストを提供する場合は、この質問へのリンクを含めてください。 –

+0

@ JigarParekhユーザーは、彼らがそれを解決する方法のコンテキストと同じ問題を抱えているとだけ言いました。これは答えであり質問ではありません。 – starsplusplus

関連する問題