例如,捆绑' A'和一捆' B'正在使用log4j。我们只能有一个log4j吗?或者是否需要在每个包中包含log4j?
答案 0 :(得分:5)
如果捆绑'A'正在导出log4j包而捆绑'B'导入它们,那么捆绑'B'可以使用捆绑'A'中的log4j。
实际上更好的想法是使用log4j bundle(log4j 1.2.16是一个OSGi兼容的版本),然后让'A'和'B'导入它。您可以检查我链接的log4j.jar,看看它是否有OSGi清单条目。
答案 1 :(得分:3)
我同意别人所说的话。不仅可以只有一个log4j jar的副本,这是非常需要的。避免这种罐子重复是OSGi的主要用例之一。而不是在bundle中防御性地打包库以确保它们在类路径上,每个bundle都可以显式声明对库包的依赖 - 在这种情况下是log4j。这样可以避免膨胀,并且如果需要,还可以更轻松地更新共享库。
答案 2 :(得分:0)
如果你共享一个包,它将只有一个全局状态(静态字段等)。
通常你可以重用log4j,但是如果你想要一个包的DEBUG级别和另一个应用程序的INFO,你需要维护两个包。
答案 3 :(得分:0)
OSGi的整个想法是能够分享......
也就是说,共享创建了耦合,一般而言,您只希望与公共API耦合。糟糕的捆绑包似乎在无穷无尽的依赖关系中传递。 OSGi服务的整个想法是尽量减少人们在与其他捆绑捆绑过多时产生的大泥浆。
答案 4 :(得分:0)
Dev给了你答案。 OSGi的想法是能够以捆绑包之间的最小依赖关系共享内容。