由于 OSGI BundleException,GWT 插件无法在 JDK 11 或 17 的 Eclipse 2022-03 中加载
GWT plugin fails to load in Eclipse 2022-03 with JDK 11 or 17 because of OSGI BundleException
- 已下载 Eclipse:
eclipse-java-2022-03-R-linux-gtk-x86_64.tar.gz
- 从此更新站点安装的 GWT:
http://storage.googleapis.com/gwt-eclipse-plugin/v3/release/
- 尝试了各种 Java 版本(存储库中的 OpenJDK 11 和 17,并从 adoptium.net 下载)
- 总是遇到同样的问题:
org.osgi.framework.BundleException: Could not resolve module: com.gwtplugins.gdt.eclipse.core [600]
Unresolved requirement: Require-Bundle: com.gwtplugins.gdt.eclipse.platform
-> Bundle-SymbolicName: com.gwtplugins.gdt.eclipse.platform; bundle-version="3.0.0.201710131939"; singleton:="true"
com.gwtplugins.gdt.eclipse.platform [602]
No resolution report for the bundle. Bundle was not resolved because of a uses constraint violation.
org.apache.felix.resolver.reason.ReasonException: Uses constraint violation. Unable to resolve resource com.gwtplugins.gdt.eclipse.platform [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.201710131939"; osgi.identity="com.gwtplugins.gdt.eclipse.platform"; singleton:="true"] because it is exposed to package 'javax.servlet' from resources javax.servlet [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.v201112011016"; osgi.identity="javax.servlet"] and jakarta.servlet-api [osgi.identity; type="osgi.bundle"; version:Version="4.0.0"; osgi.identity="jakarta.servlet-api"] via two dependency chains.
Chain 1:
com.gwtplugins.gdt.eclipse.platform [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.201710131939"; osgi.identity="com.gwtplugins.gdt.eclipse.platform"; singleton:="true"]
require: (osgi.wiring.bundle=javax.servlet)
|
provide: osgi.wiring.bundle: javax.servlet
javax.servlet [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.v201112011016"; osgi.identity="javax.servlet"]
Chain 2:
com.gwtplugins.gdt.eclipse.platform [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.201710131939"; osgi.identity="com.gwtplugins.gdt.eclipse.platform"; singleton:="true"]
require: (osgi.wiring.bundle=org.eclipse.jetty.servlet)
|
provide: osgi.wiring.bundle; bundle-version:Version="10.0.6"; osgi.wiring.bundle="org.eclipse.jetty.servlet"
org.eclipse.jetty.servlet [osgi.identity; type="osgi.bundle"; version:Version="10.0.6"; osgi.identity="org.eclipse.jetty.servlet"]
import: (&(osgi.wiring.package=javax.servlet)(&(version>=4.0.0)(!(version>=5.0.0))))
|
export: osgi.wiring.package: javax.servlet
jakarta.servlet-api [osgi.identity; type="osgi.bundle"; version:Version="4.0.0"; osgi.identity="jakarta.servlet-api"]
at org.eclipse.osgi.container.Module.start(Module.java:463)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.run(ModuleContainer.java:1847)
at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.execute(EquinoxContainerAdaptor.java:136)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1781)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
我的系统如 Eclipse 所描述的那样:
eclipse.buildId=4.23.0.I20220308-0310
java.version=17.0.3
java.vendor=Private Build
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=de_DE
Framework arguments: -product org.eclipse.epp.package.java.product
Command-line arguments: -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product -data XXXXXXXXX
uname -a
: Linux mycomputername #25~20.04.2tux1 SMP Tue Apr 12 10:34:50 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Linux:Ubuntu 20.04.4 LTS 与“Budgie”桌面
我也尝试了另一个 Eclipse 版本,但结果相同。 (eclipse-SDK-4.23-linux-gtk-x86_64.tar.gz
)
我发现了其他 BundleException
个问题,但是 only one for GWT,而且没有答案。并且其他问题不适用于此问题。它们是由应用程序创建者引起的,但我不是 GWT 的创建者,其他人使用它没有问题。
编辑 2022.05.01:
我没有找到解决方案,但有奇怪的解决方法:如果我使用没有“Eclipse Java Web Developer Tools”的 Eclipse 下载,并使用带有旧 Eclipse 更新站点的“.p2f”文件来安装旧版本的“Eclipse Java Web Developer Tools”从那里开始,然后 GWT 工作。
问题与 javax.servlet
“.jar”文件有关。如果 Eclipse 决定下载 javax.servlet_3.1.0.v201410161800.jar
GWT 工作。但是,如果 Eclipse 决定改用 javax.servlet_3.0.0.v201112011016.jar
,GWT 将不起作用。奇怪的是:较新版本的 Eclipse 使用旧版本的“.jar”,旧版本的 Eclipse 使用较新版本的“.jar”。
使用来自 https://download.eclipse.org/eclipse/downloads/drops4/R-4.23-202203080310/
的 Eclipse,以下“.p2f”文件为我生成了一个有效的 GWT 安装:
<?xml version='1.0' encoding='UTF-8'?>
<?p2f version='1.0.0'?>
<p2f version='1.0.0'>
<ius size='3'>
<iu id='org.eclipse.jst.web_ui.feature.feature.group' name='Eclipse Java Web Developer Tools' version='3.22.0.v202103200058'>
<repositories size='1'>
<repository location='https://download.eclipse.org/releases/2021-06'/>
</repositories>
</iu>
<iu id='com.gwtplugins.eclipse.sdkbundle.gwt28.feature.feature.group' name='GWT 2.8.1 SDK' version='2.8.0.201710131939'>
<repositories size='1'>
<repository location='http://storage.googleapis.com/gwt-eclipse-plugin/v3/release'/>
</repositories>
</iu>
<iu id='com.gwtplugins.eclipse.suite.v3.feature.feature.group' name='GWT Eclipse Plugin' version='3.0.0.201710131939'>
<repositories size='1'>
<repository location='http://storage.googleapis.com/gwt-eclipse-plugin/v3/release'/>
</repositories>
</iu>
</ius>
</p2f>
之后,卸载旧的“Eclipse Java Web Developer Tools”并从当前更新站点安装当前版本。 GWT 将继续工作。
正如我所说,这不是解决方案,只是一个奇怪的解决方法。
这似乎是 com.gwtplugins.gdt.eclipse.platform
包中的一个缺陷,它在本应使用 Import-Package.[=16= 时使用 Require-Bundle 访问 javax.servlet
包]
com.gwtplugins.gdt.eclipse.platform
Require-Bundle 的 javax.servlet
包和 org.eclipse.jetty.servlet
包使用了不同版本的 javax.servlet
包,因此 class加载器无法正确构建。
- 已下载 Eclipse:
eclipse-java-2022-03-R-linux-gtk-x86_64.tar.gz
- 从此更新站点安装的 GWT:
http://storage.googleapis.com/gwt-eclipse-plugin/v3/release/
- 尝试了各种 Java 版本(存储库中的 OpenJDK 11 和 17,并从 adoptium.net 下载)
- 总是遇到同样的问题:
org.osgi.framework.BundleException: Could not resolve module: com.gwtplugins.gdt.eclipse.core [600]
Unresolved requirement: Require-Bundle: com.gwtplugins.gdt.eclipse.platform
-> Bundle-SymbolicName: com.gwtplugins.gdt.eclipse.platform; bundle-version="3.0.0.201710131939"; singleton:="true"
com.gwtplugins.gdt.eclipse.platform [602]
No resolution report for the bundle. Bundle was not resolved because of a uses constraint violation.
org.apache.felix.resolver.reason.ReasonException: Uses constraint violation. Unable to resolve resource com.gwtplugins.gdt.eclipse.platform [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.201710131939"; osgi.identity="com.gwtplugins.gdt.eclipse.platform"; singleton:="true"] because it is exposed to package 'javax.servlet' from resources javax.servlet [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.v201112011016"; osgi.identity="javax.servlet"] and jakarta.servlet-api [osgi.identity; type="osgi.bundle"; version:Version="4.0.0"; osgi.identity="jakarta.servlet-api"] via two dependency chains.
Chain 1:
com.gwtplugins.gdt.eclipse.platform [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.201710131939"; osgi.identity="com.gwtplugins.gdt.eclipse.platform"; singleton:="true"]
require: (osgi.wiring.bundle=javax.servlet)
|
provide: osgi.wiring.bundle: javax.servlet
javax.servlet [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.v201112011016"; osgi.identity="javax.servlet"]
Chain 2:
com.gwtplugins.gdt.eclipse.platform [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.201710131939"; osgi.identity="com.gwtplugins.gdt.eclipse.platform"; singleton:="true"]
require: (osgi.wiring.bundle=org.eclipse.jetty.servlet)
|
provide: osgi.wiring.bundle; bundle-version:Version="10.0.6"; osgi.wiring.bundle="org.eclipse.jetty.servlet"
org.eclipse.jetty.servlet [osgi.identity; type="osgi.bundle"; version:Version="10.0.6"; osgi.identity="org.eclipse.jetty.servlet"]
import: (&(osgi.wiring.package=javax.servlet)(&(version>=4.0.0)(!(version>=5.0.0))))
|
export: osgi.wiring.package: javax.servlet
jakarta.servlet-api [osgi.identity; type="osgi.bundle"; version:Version="4.0.0"; osgi.identity="jakarta.servlet-api"]
at org.eclipse.osgi.container.Module.start(Module.java:463)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.run(ModuleContainer.java:1847)
at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.execute(EquinoxContainerAdaptor.java:136)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1781)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
我的系统如 Eclipse 所描述的那样:
eclipse.buildId=4.23.0.I20220308-0310
java.version=17.0.3
java.vendor=Private Build
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=de_DE
Framework arguments: -product org.eclipse.epp.package.java.product
Command-line arguments: -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.java.product -data XXXXXXXXX
uname -a
: Linux mycomputername #25~20.04.2tux1 SMP Tue Apr 12 10:34:50 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Linux:Ubuntu 20.04.4 LTS 与“Budgie”桌面
我也尝试了另一个 Eclipse 版本,但结果相同。 (eclipse-SDK-4.23-linux-gtk-x86_64.tar.gz
)
我发现了其他 BundleException
个问题,但是 only one for GWT,而且没有答案。并且其他问题不适用于此问题。它们是由应用程序创建者引起的,但我不是 GWT 的创建者,其他人使用它没有问题。
编辑 2022.05.01:
我没有找到解决方案,但有奇怪的解决方法:如果我使用没有“Eclipse Java Web Developer Tools”的 Eclipse 下载,并使用带有旧 Eclipse 更新站点的“.p2f”文件来安装旧版本的“Eclipse Java Web Developer Tools”从那里开始,然后 GWT 工作。
问题与 javax.servlet
“.jar”文件有关。如果 Eclipse 决定下载 javax.servlet_3.1.0.v201410161800.jar
GWT 工作。但是,如果 Eclipse 决定改用 javax.servlet_3.0.0.v201112011016.jar
,GWT 将不起作用。奇怪的是:较新版本的 Eclipse 使用旧版本的“.jar”,旧版本的 Eclipse 使用较新版本的“.jar”。
使用来自 https://download.eclipse.org/eclipse/downloads/drops4/R-4.23-202203080310/
的 Eclipse,以下“.p2f”文件为我生成了一个有效的 GWT 安装:
<?xml version='1.0' encoding='UTF-8'?>
<?p2f version='1.0.0'?>
<p2f version='1.0.0'>
<ius size='3'>
<iu id='org.eclipse.jst.web_ui.feature.feature.group' name='Eclipse Java Web Developer Tools' version='3.22.0.v202103200058'>
<repositories size='1'>
<repository location='https://download.eclipse.org/releases/2021-06'/>
</repositories>
</iu>
<iu id='com.gwtplugins.eclipse.sdkbundle.gwt28.feature.feature.group' name='GWT 2.8.1 SDK' version='2.8.0.201710131939'>
<repositories size='1'>
<repository location='http://storage.googleapis.com/gwt-eclipse-plugin/v3/release'/>
</repositories>
</iu>
<iu id='com.gwtplugins.eclipse.suite.v3.feature.feature.group' name='GWT Eclipse Plugin' version='3.0.0.201710131939'>
<repositories size='1'>
<repository location='http://storage.googleapis.com/gwt-eclipse-plugin/v3/release'/>
</repositories>
</iu>
</ius>
</p2f>
之后,卸载旧的“Eclipse Java Web Developer Tools”并从当前更新站点安装当前版本。 GWT 将继续工作。
正如我所说,这不是解决方案,只是一个奇怪的解决方法。
这似乎是 com.gwtplugins.gdt.eclipse.platform
包中的一个缺陷,它在本应使用 Import-Package.[=16= 时使用 Require-Bundle 访问 javax.servlet
包]
com.gwtplugins.gdt.eclipse.platform
Require-Bundle 的 javax.servlet
包和 org.eclipse.jetty.servlet
包使用了不同版本的 javax.servlet
包,因此 class加载器无法正确构建。