0

JDeveloper 10.1.3.x

最近、エクスポートされていないライブラリは、application-oc4j-app.xmlファイルにライブラリエントリがないため、埋め込みOC4Jコンテナにデプロイされたときにクラスパスに含まれないことを知りました。

また、自分のプロジェクトが依存しているプロジェクトにエクスポートされいないライブラリが、application-oc4j-app.xmlファイルに含まれていることも示しました。

私のプロジェクトでエクスポートされていないライブラリは含まれません。プロジェクトの依存関係にあるエクスポートされていないライブラリは含まれます。

これはバグですか、それとも機能ですか。プロジェクトの依存関係にあるエクスポートされていないライブラリも含まれないように、その動作を変更できますか?

ありがとう、スティーブ

4

2 に答える 2

0

エクスポートされていないライブラリは、アプリケーションの-oc4j-app.xmlファイルに含めないでください。JDeveloperにバグまたは不可解な動作があるようです。

IMHOは、Eclipseまたは<ここに別のIDEを挿入>とJDeveloperのどちらかを選択できるので、Eclipseを選択するのが賢明です。

以前に言及した不可解な動作の1つは、現在のワークスペース・ファイル( jwsファイル)の一部でなくても、JDeveloperがアプリケーションのディレクトリ内のすべてのプロジェクトをコンパイルする際の問題でした。つまり、JWSファイルに別の記述がある場合でも(つまり、JDeveloperワークスペースに視覚的に表示されない場合でも)、JDeveloperはJPRファイルをワークスペースに含めることを検討します。

于 2009-09-12T21:55:19.597 に答える
0

今日まで、ビルド時と実行時で異なるクラスパスを指定する方法は見つかりませんでしたが、同僚の助けを借りて、特定の状況に対する解決策が見つかりました。コネクターは JDev プロジェクトではありませんが、依存プロジェクトは、パッケージ化されてロードされた log4j jar ファイルを参照できます。これにより、スタンドアロンと組み込みの oc4j コンテナのデプロイメントの両方で、実行時の動作が効果的に模倣されます。このデプロイメントでは、Web アプリケーションと関連するアプリケーション コードが、サード パーティの JCA コネクタのクラスローダーによってロードされた log4j インスタンスにリンクされます。2 つの異なるクラスローダによってロードされた log4j ライブラリが、log4j の静的初期化子に関してライブラリの 2 つの異なるインスタンスに見えると仮定すると、これがうまくいくとは思いませんでした。(これが、log4j がクラスローダー階層でそれ自体の別のインスタンスを見つけた場合に例外をスローするように動機付けていると私が推測しているものです。) 少なくとも組み込みシナリオでは、明らかにそうではありません。Maven ビルドは、ビルド ファイル内の「提供された」スコープ仕様を介してアプリケーション EAR ファイルに log4j ライブラリ jar のコピーを含めないことを認識しているため、スタンドアロン コンテナーに対してこれをテストする必要はありません。組み込みの OC4J コンテナは、関連する log4 ライブラリ インスタンスである JCA コネクタをロードし、アプリケーションをデプロイして、両方が同じ log4j ライブラリ ファイルから log4j クラスを使用できるようにします。コネクタと Web アプリケーションのクラスローダーがどのように相互作用するかは完全にはわかりませんが、現在は機能しています。少なくとも組み込みシナリオの場合。Maven ビルドは、ビルド ファイル内の「提供された」スコープ仕様を介してアプリケーション EAR ファイルに log4j ライブラリ jar のコピーを含めないことを認識しているため、スタンドアロン コンテナーに対してこれをテストする必要はありません。組み込みの OC4J コンテナは、関連する log4 ライブラリ インスタンスである JCA コネクタをロードし、アプリケーションをデプロイして、両方が同じ log4j ライブラリ ファイルから log4j クラスを使用できるようにします。コネクタと Web アプリケーションのクラスローダーがどのように相互作用するかは完全にはわかりませんが、現在は機能しています。少なくとも組み込みシナリオの場合。Maven ビルドは、ビルド ファイル内の「提供された」スコープ仕様を介してアプリケーション EAR ファイルに log4j ライブラリ jar のコピーを含めないことを認識しているため、スタンドアロン コンテナーに対してこれをテストする必要はありません。組み込みの OC4J コンテナは、関連する log4 ライブラリ インスタンスである JCA コネクタをロードし、アプリケーションをデプロイして、両方が同じ log4j ライブラリ ファイルから log4j クラスを使用できるようにします。コネクタと Web アプリケーションのクラスローダーがどのように相互作用するかは完全にはわかりませんが、現在は機能しています。関連付けられた log4 ライブラリ インスタンスは、アプリケーションをデプロイし、両方が同じ log4j ライブラリ ファイルから log4j クラスを使用できるようにします。コネクタと Web アプリケーションのクラスローダーがどのように相互作用するかは完全にはわかりませんが、現在は機能しています。関連付けられた log4 ライブラリ インスタンスは、アプリケーションをデプロイし、両方が同じ log4j ライブラリ ファイルから log4j クラスを使用できるようにします。コネクタと Web アプリケーションのクラスローダーがどのように相互作用するかは完全にはわかりませんが、現在は機能しています。

于 2009-09-16T12:25:37.257 に答える