1

私は Eclipse RCP アプリケーションに取り組んでおり、すべてのログをログ ウィンドウにリダイレクトできるように、カスタマイズされた ConsoleAppender が必要です。log4j プラグインと log4j フラグメント (log4j.properties を含む) は、うまく使用できるユニットを作成します。ログデータをキャプチャするためのコードを含む「拡張」プラグインも作成しました。2 つのプラグインと以下のフラグメントを見てください。

rcp_external_log4j (plugin containing the jar file)
  log4j-1.2.16.jar

rcp_external_log4j_fragment (containing the log4j.properties file)
  log4j.properties (which points to VirtualConsol)

rcp_external_log4j_extension (plugin containing the VirtualConsol)
  src/VirtualControl.java (which extends ConsoleAppender)

Eclipse デバッグ環境内からプロジェクトを実行すると、すべて正常に動作します。VirtualConsole は、期待どおりにすべてのログ データを転送します。

ただし、「Eclipse 製品エクスポート ウィザード」を使用してプロジェクトをスタンドアロンの実行可能ファイルにエクスポートしようとすると、次の問題が発生します。

Problem Occured
'Export Product' has encountered a problem.
A cycle was detected when generating the classpath
rcp_external_log4j_extension
rcp_external_log4j
rcp_external_log4j_extension

VirtualConsole は ConsoleAppender を拡張し、コードの他の部分からも呼び出されます。VirtualConsole は rcp_external_log4j_extension にあり、ConsoleAppender の拡張により log4j を使用します。rcp_external_log4j は、rcp_external_log4j プラグインが rcp_external_log4j_fragment にバンドルされているため、rcp_external_log4j_extension を使用します。これは、log4j.properties ファイル内の VirtualConsole を参照します。

質問: 循環依存関係を取得せずに独自の ConsoleAppender を作成するにはどうすればよいですか? コードをフラグメントに入れることはできますか? jar ファイル (rcp_external_log4j) を含むプラグインにコードを入れることはできますか? 私はそれらの2つの試みを試みましたが、成功しませんでした...

助けてくれてありがとう


問題が解決しました。src は jar ファイルと同じプラグインに入れられます。

rcp_external_log4j (plugin containing the jar file)
  log4j-1.2.16.jar
  src/VirtualControl.java (which extends ConsoleAppender)

rcp_external_log4j_fragment (containing the log4j.properties file)
  log4j.properties (which points to VirtualConsol)

rcp_external_log4j のクラスパスに「src」が追加されました。MANIFEST.MF で次のように表示されます。

Bundle-ClassPath: log4j-1.2.16.jar,
 src/

このようにして、フラグメントと他のコードの両方から VirtualConsole を使用できます。

また、build.properties には以下が含まれている必要があります。

jars.compile.order = src/
source.src/ = src/
output.src/ = bin/

コードが輸出される製品に含まれるようにします。

4

1 に答える 1

0

マニフェストにのみ、ビルドパスに含めるrcp_external_log4j_fragment必要はないと思います。rcp_external_log4j_extensionこれにより、サイクルが削除されます。

于 2013-09-17T11:16:10.603 に答える