【问题标题】:OSGi - modify a class in a bundle without modifying the original bundleOSGi - 修改包中的类而不修改原始包
【发布时间】:2014-07-10 14:19:10
【问题描述】:

我需要修改 OSGi 包中的一个类。但是这个捆绑包来自上游项目,因此我不能(/不会)触摸它。但我必须修改其中的一个类以符合我项目的要求。所以,我正在为此寻找解决方案。

所以,我创建了自己的包含修补类的包。但是自从上游的 OSGi 包和我创建的补丁 OSGi 包有相同的包以来,有一个复杂的问题。我想覆盖上游 OSGi 包中的类,而不触及它。

我查看了osgi.org Fragment 页面。它提出了一种使用片段包修补主机包的方法,但为此我必须修改上游项目包的MANIFEST.MF 以设置Bundle-ClassPath: patch.jar,.

有什么建议吗?

【问题讨论】:

    标签: osgi equinox osgi-bundle


    【解决方案1】:

    您可以实现WeavingHook 并捕获该捆绑包的类加载。

    但是,只有在您没有其他机会解决问题时才这样做。如果您有机会为包含该 jar 的项目做出贡献,请为他们发送一个补丁,并将其作为临时解决方案。有了这样的 hack,你的系统对其他人来说就会变得混乱。

    【讨论】:

    • 是的。最初的问题归结为:我想改变一些东西而不实际改变它。这只是不合理的事情。要么改变它,要么不改变它。可以在运行时使用编织钩子来替换类,但这也有其风险。
    • 在这种情况下,回馈项目不起作用,因为它是自定义更改。我会尝试使用编织钩。我知道编织钩子与类加载器一起玩,但有什么风险?
    • @user3580...:假设您是您的同事,他得到您的代码以继续开发。想象一下,您无法自言自语地谈论您应用的技巧。您将如何找到修复错误、调试和改进代码的位置。对您来说很清楚的解决方案对其他人来说可能很神奇。许多项目被放弃了,因为其中有太多棘手的解决方案,没有其他人理解代码,只有编写它的人。这就是为什么如果您没有其他选择,我建议将此视为临时解决方案。
    • 如果是自定义更改,那就想办法让原始库更加抽象或可扩展。这样,您就可以应用您的自定义更改而无需 hack,其他人也可以进行自己的自定义更改。
    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多