Java Eclipse RCP中定制的ConsolePender提供了循环依赖关系

Java Eclipse RCP中定制的ConsolePender提供了循环依赖关系,java,eclipse-plugin,log4j,eclipse-rcp,fragment,Java,Eclipse Plugin,Log4j,Eclipse Rcp,Fragment,我正在开发一个Eclipse RCP应用程序,我希望有一个定制的ConsolePender,这样我就可以将所有日志重定向到日志窗口。 log4j插件和包含log4j.properties的log4j片段创建了一个我成功使用的单元。 我还创建了一个“扩展”插件,其中包含捕获日志数据的代码。请看下面的2个插件和片段 rcp_external_log4j (plugin containing the jar file) log4j-1.2.16.jar rcp_external_log4j_fr

我正在开发一个Eclipse RCP应用程序,我希望有一个定制的ConsolePender,这样我就可以将所有日志重定向到日志窗口。 log4j插件和包含log4j.properties的log4j片段创建了一个我成功使用的单元。 我还创建了一个“扩展”插件,其中包含捕获日志数据的代码。请看下面的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扩展了ConsolePender,也从代码的其他部分调用它。 虚拟解决方案位于rcp_external_log4j_扩展中,由于ConsolePender的扩展,它使用log4j。 rcp_external_log4j使用rcp_external_log4j_扩展,因为rcp_external_log4j插件与rcp_external_log4j_片段捆绑在一起,后者引用log4j.properties文件中的虚拟解决方案

问题:如何编写自己的ConsolePender而不获得循环依赖关系?我可以把代码放在片段中吗?我可以把代码放在包含jar文件rcp_external_log4j的插件中吗?我试过这两次,但都没有成功

谢谢你的帮助

问题解决了。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)
并将“src”添加到rcp_external_log4j的类路径中。在MANIFEST.MF中被视为

Bundle-ClassPath: log4j-1.2.16.jar,
 src/
通过这种方式,可以从片段和其他代码中使用VirtualConsole

而build.properties应该包含:

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

对于要包含在导出产品中的代码

我认为rcp_external_log4j_片段不需要在其构建路径中有rcp_external_log4j_扩展,只需要在清单中。这将消除循环。

我尝试了您的解决方案,并在导出产品时成功地消除了循环依赖关系,但是现在由于找不到rcp_external_log4j_扩展,导出失败。。。谢谢。动态导入包或好友类加载能解决循环依赖问题吗?