Java 无法解析捆绑包修订,因为它通过两个依赖关系链暴露给包
我的代码->程序包X(第三方程序包)->org.apache.commons.lang 2.6.0Java 无法解析捆绑包修订,因为它通过两个依赖关系链暴露给包,java,osgi,aem,osgi-bundle,Java,Osgi,Aem,Osgi Bundle,我的代码->程序包X(第三方程序包)->org.apache.commons.lang 2.6.0 我的代码->包Y(第三方包)->org.apache.commons.lang 2.4 我对X包和Y包都没有控制权 以下是我的错误: 02.04.2017 08:02:12.315 *INFO* [OsgiInstallerImpl] org.apache.sling.installer.core.impl.tasks.RestartActiveBundlesTask Unable to star
我的代码->包Y(第三方包)->org.apache.commons.lang 2.4 我对X包和Y包都没有控制权 以下是我的错误:
02.04.2017 08:02:12.315 *INFO* [OsgiInstallerImpl] org.apache.sling.installer.core.impl.tasks.RestartActiveBundlesTask Unable to start bundle com.mynews.my-wcm-bundle [394] : Uses constraint violation. Unable to resolve bundle revision com.mynews.my-wcm-bundle [394.11] because it is exposed to package 'org.apache.commons.lang.math' from bundle revisions com.mynews.my-wcm-dependencies-bundle [395.39] and com.day.commons.osgi.wrapper.commons-lang2 [45.0] via two dependency chains.
**Chain 1:**
com.mynews.my-wcm-bundle [394.11]
import: (&(osgi.wiring.package=org.apache.commons.lang.math)(version>=2.6.0)(!(version>=3.0.0)))
|
export: osgi.wiring.package=org.apache.commons.lang.math
com.mynews.my-wcm-dependencies-bundle [395.39]
**Chain 2:**
com.mynews.my-wcm-bundle [394.11]
import: (osgi.wiring.package=com.day.cq.security)
|
export: osgi.wiring.package=com.day.cq.security; uses:=com.day.cq.commons
com.day.cq.cq-security-api [283.0]
import: (osgi.wiring.package=com.day.cq.commons)
|
export: osgi.wiring.package=com.day.cq.commons; uses:=org.apache.commons.lang.time
com.day.cq.cq-commons [264.0]
import: (&(osgi.wiring.package=org.apache.commons.lang.time)(version>=2.4.0)(!(version>=3.0.0)))
|
export: osgi.wiring.package=org.apache.commons.lang.time; uses:=org.apache.commons.lang.math
export: osgi.wiring.package=org.apache.commons.lang.math
com.day.commons.osgi.wrapper.commons-lang2 [45.0]
如果您查看这些链,您会发现一个包需要commons lang版本[2.4,3],另一个包需要commons lang版本[2.6,3)。因此,如果您确保只安装commons lang 2.6,那么您的捆绑包应该可以解决问题。我同意,但一些第三方JAR需要commons lang 2.4,因此我必须保留2.4。在这种情况下,我认为您无法使用当前的捆绑包集解决问题。也许第三方LIB的升级可以帮助解决问题。一般来说,尽量不要公开第三方pa在您自己的捆绑包中公开API。这才是导致这些链出现问题的真正原因。什么是“尽量不在您自己的捆绑包中公开第三方API”?a)不将第三方软件包包含在my bundle中?或b)不嵌入第三方JAR,这意味着导出的软件包中不应使用您导入的软件包中的类。在您的情况下,您在导出的软件包中似乎使用了commons time中的某些内容。这会暴露导入您的软件包的软件包e到commons时间类,这就是导致uses约束冲突的原因。您说过“您的包中导出的包不应使用您导入的包中的类”。试图理解此声明。如果您看到此屏幕截图,我的包名为com.aprilcompany.aprilproject。它需要一些第三方包,我正在通过依赖项包导入它们。我觉得,在这里,导出和导入是必要的。