由于 icu4j,无法运行需要“org.eclipse.pde.core”的 OSGi 测试

Posted

技术标签:

【中文标题】由于 icu4j,无法运行需要“org.eclipse.pde.core”的 OSGi 测试【英文标题】:Can not run OSGi tests requiring "org.eclipse.pde.core" because of icu4j 【发布时间】:2022-01-07 02:42:04 【问题描述】:

我正在尝试使用来自bnd 的aQute.bnd.gradle.TestOSGi 任务运行一些测试。

我的图书馆需要org.eclipse.pde.core

Resolution failed. Capabilities satisfying the following requirements could not be found:
    [<<INITIAL>>]
      ⇒ osgi.identity: (osgi.identity=org.eclipse.pde.core)
          ⇒ [org.eclipse.pde.core version=3.13.200.v20191202-2135]
              ⇒ osgi.wiring.bundle: (&(osgi.wiring.bundle=org.eclipse.team.core)(bundle-version>=3.2.0)(!(bundle-version>=4.0.0)))
                  ⇒ [org.eclipse.team.core version=3.8.800.v20191122-2107]
                      ⇒ osgi.wiring.bundle: (&(osgi.wiring.bundle=org.eclipse.compare.core)(bundle-version>=3.5.200)(!(bundle-version>=4.0.0)))
                          ⇒ [org.eclipse.compare.core version=3.6.700.v20191122-2107]
                              ⇒ osgi.wiring.package: (&(osgi.wiring.package=com.ibm.icu.text)(version>=3.6.1))

我有 'com.ibm.icu:icu4j:64.2' 作为依赖项,我什至表示我想启动捆绑包 com.ibm.icu

-runrequires: \
    bnd.identity;id='$project.archivesBaseName',\
    bnd.identity;id='junit-jupiter-engine',\
    bnd.identity;id='junit-platform-launcher',\
    bnd.identity;id='org.eclipse.pde.core',\
    bnd.identity;id='com.ibm.icu',\

最小的复制器项目可以在这里找到:pde-run project on GitHub


我查看了icu4j.jar 中的 MANIFEST 文件。

我看到以下内容:

Bundle-ManifestVersion: 2
Bundle-Name: ICU4J
Bundle-Description: International Components for Unicode for Java
Bundle-SymbolicName: com.ibm.icu
Bundle-Version: 64.2

Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Main-Class: com.ibm.icu.util.VersionInfo
Export-Package: com.ibm.icu.lang,com.ibm.icu.math,com.ibm.icu.number,com.ibm.icu.text,com.ibm.icu.util
Automatic-Module-Name: com.ibm.icu

所以 com.ibm.icu.text 被这个包导出了。

有没有办法了解发生了什么?

我认为Bundle-RequiredExecutionEnvironment 条目可能会阻止启动包(我正在使用 Java 8 进行测试)。如果是这种情况,我该怎么做才能解决我的问题?


【问题讨论】:

【参考方案1】:

未满足的要求是将com.ibm.icu.textversion&gt;=3.6.1 打包在一起。但是,您显示的 icu4j.jar 副本的导出是未版本化的,这意味着它的隐式版本为 0.0.0。

很遗憾,0.0.0 不大于或等于 3.6.1,因此此捆绑包不满足 org.eclipse.compare.core 捆绑包的要求。

【讨论】:

好的,Maven Central (com.ibm.icu:icu4j:64.2) 上的 icu4j jar 与您可以从 P2 更新站点 com.ibm.icu_64.2.0.v20190507-1337.jar 下载的不同。 OSGi 元数据不同。【参考方案2】:

我认为您需要来自 Eclipse Orbit 的正确 com.ibm.icu 捆绑包。例如,请参阅https://download.eclipse.org/oomph/archive/reports/download.eclipse.org/releases/2021-09/index/com.ibm.icu_67.1.0.v20200706-1749.html

【讨论】:

绝对...... OSGi 元数据在 2 个地方不一样。

以上是关于由于 icu4j,无法运行需要“org.eclipse.pde.core”的 OSGi 测试的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ICU4J 中获得“当前”IANA 时区缩写?

机械硬盘显示无法访问由于IO设备错误,无法运行此项请求的资料寻回法子

移动硬盘由于IO设备错误,无法运行此项请求要怎么恢复文件

如何在 Java 中规范化 Unicode 数字

移动硬盘显示无法访问由于IO设备错误,无法运行此项请求,里面的资料如何寻回

由于端口无法运行 XAMPP?