Java 12 上的 Eclipse E4

Eclipse E4 on Java 12

我正在将我们的 Eclipse E4 应用程序迁移到 jre12(8 到 12 迁移)。当我从 Eclipse 中 运行 我的开发环境中的应用程序时,一切正常。当我使用 Tycho 构建应用程序时,我在启动应用程序时遇到错误。

!SESSION 2019-06-17 10:53:38.481 -----------------------------------------------
eclipse.buildId=unknown
java.version=12.0.1
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -clearPersistedState
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -clearPersistedState

!ENTRY org.eclipse.osgi 4 0 2019-06-17 10:53:44.449
!MESSAGE Application error
!STACK 1
org.eclipse.e4.core.di.InjectionException: java.lang.NoClassDefFoundError: javax/annotation/PostConstruct
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:410)
    at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createDefaultHeadlessContext(E4Application.java:491)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createDefaultContext(E4Application.java:505)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:204)
    at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:149)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
Caused by: java.lang.NoClassDefFoundError: javax/annotation/PostConstruct
    at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399)
    ... 18 more
Caused by: java.lang.ClassNotFoundException: javax.annotation.PostConstruct cannot be found by org.eclipse.e4.core.di_1.6.100.v20170421-1418
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:433)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 20 more

!ENTRY org.eclipse.e4.ui.workbench 4 0 2019-06-17 10:53:44.468
!MESSAGE FrameworkEvent ERROR
!STACK 0
java.lang.NoClassDefFoundError: javax/annotation/PreDestroy
    at org.eclipse.e4.core.internal.di.InjectorImpl.disposed(InjectorImpl.java:450)
    at org.eclipse.e4.core.internal.di.Requestor.disposed(Requestor.java:156)
    at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:78)
    at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:111)
    at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.handleInvalid(TrackableComputationExt.java:74)
    at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:178)
    at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.dispose(EclipseContextOSGi.java:99)
    at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.bundleChanged(EclipseContextOSGi.java:141)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:213)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:120)
    at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:112)
    at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:168)
    at org.eclipse.osgi.container.Module.publishEvent(Module.java:476)
    at org.eclipse.osgi.container.Module.doStop(Module.java:634)
    at org.eclipse.osgi.container.Module.stop(Module.java:498)
    at org.eclipse.osgi.container.SystemModule.stop(SystemModule.java:202)
    at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule.run(EquinoxBundle.java:165)
    at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.ClassNotFoundException: javax.annotation.PreDestroy cannot be found by org.eclipse.e4.core.di_1.6.100.v20170421-1418
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:433)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 21 more

javax.annotations在我们的自定义插件中配置为必需插件。 我还添加了 javax.annotations 到我们的 maven 文件中。当我检查构建项目中的库时,javax.annotation_1.2.0.v201602091430.jar 包含在插件目录中。

我尝试使用已在 中回答的模块 java.se.ee。 而且 eclipse E4 应用程序仍然找不到依赖项。

有人可以帮我解决这个问题吗?

我的目标文件中的目标存储库是(可以在此处查看完整文件 https://www.codepile.net/pile/xO8oR272):

<repository location="http://download.eclipse.org/eclipse/updates/4.11/" />
<repository location="http://download.eclipse.org/releases/2019-03/"/>
<repository location="http://download.eclipse.org/nattable/releases/1.5.0/repository/"/>

<repository location="http://download.eclipse.org/nebula/snapshot/"/>
<repository location="http://download.eclipse.org/nebula/incubation/snapshot/"/>
<repository location="http://download.eclipse.org/nattable/snapshots/latest/repository/"/>

Config.ini 文件看起来像:

#This configuration file was written by: org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser
#Mon Jun 17 10:48:39 CEST 2019
serverLocation=Development
eclipse.p2.profile=DefaultProfile
osgi.framework=file\:plugins/org.eclipse.osgi_3.12.100.v20180210-1608.jar
equinox.use.ds=true
ds.delayed.keepInstances=true
osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.2.1.v20180131-1435.jar@1\:start
org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
eclipse.product=CR-IT_client.product
osgi.framework.extensions=reference\:file\:org.eclipse.equinox.region_1.4.0.v20170117-1425.jar,reference\:file\:org.eclipse.equinox.weaving.hook_1.2.0.v20160929-1449.jar,reference\:file\:org.eclipse.osgi.compatibility.state_1.1.0.v20170516-1513.jar
osgi.bundles.defaultStartLevel=4
eclipse.p2.data.area=@config.dir/../p2
eclipse.application=org.eclipse.e4.ui.workbench.swt.E4Application

将我的目标文件更改为新格式,现在可以使用了。 目标文件如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?>
<target includeMode="feature" name="Running Platform">
    <locations>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
            <repository location="http://download.eclipse.org/nattable/releases/1.5.0/repository/"/>
            <unit id="org.eclipse.nebula.widgets.nattable.core.feature.feature.group" version="1.5.0.201703192131"/>
            <unit id="org.eclipse.nebula.widgets.nattable.extension.e4.feature.feature.group" version="1.1.0.201703192131"/>
            <unit id="org.eclipse.nebula.widgets.nattable.extension.glazedlists.feature.feature.group" version="1.5.0.201703192131"/>
            <unit id="org.eclipse.nebula.widgets.nattable.extension.nebula.feature.feature.group" version="1.1.0.201703192131"/>
            <unit id="org.eclipse.nebula.widgets.nattable.extension.poi.feature.feature.group" version="1.5.0.201703192131"/>
        </location>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
            <repository location="http://download.eclipse.org/releases/2019-06/201904191000"/>
            <unit id="org.eclipse.equinox.sdk.feature.group" version="0.0.0"/>
            <unit id="org.eclipse.platform.sdk" version="0.0.0"/>
            <unit id="org.eclipse.wst.common_core.feature.feature.group" version="0.0.0"/>
            <unit id="org.eclipse.wst.xml_core.feature.feature.group" version="0.0.0"/>
            <unit id="org.eclipse.datatools.connectivity" version="0.0.0"/>
            <unit id="org.eclipse.emf.databinding" version="0.0.0"/>
            <unit id="org.eclipse.emf.ecore.edit" version="0.0.0"/>
            <unit id="org.eclipse.wb.swing.FormLayout.lib" version="0.0.0"/>
            <unit id="org.hamcrest.core" version="0.0.0"/>
            <unit id="org.junit" version="0.0.0"/>
        </location>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
            <repository location="http://download.eclipse.org/nebula/releases/latest"/>
            <unit id="org.eclipse.nebula.widgets.pshelf.css.feature.feature.group" version="1.0.0.201812241324"/>
            <unit id="org.eclipse.nebula.widgets.pshelf.feature.feature.group" version="1.0.0.201812241324"/>
        </location>
        <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="false" type="InstallableUnit">
            <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20190226160451/repository"/>
            <unit id="com.google.gson" version="2.8.2.v20180104-1110"/>
            <unit id="com.google.guava" version="21.0.0.v20170206-1425"/>
            <unit id="javax.activation" version="1.1.0.v201211130549"/>
            <unit id="javax.mail" version="1.4.0.v201005080615"/>
            <unit id="javax.xml.ws" version="2.1.0.v200902101523"/>
            <unit id="org.apache.batik.util.gui" version="1.9.1.v20180227-1645"/>
            <unit id="org.apache.commons.collections" version="3.2.2.v201511171945"/>
            <unit id="org.apache.commons.lang3" version="3.1.0.v201403281430"/>
            <unit id="org.apache.commons.lang" version="0.0.0"/>
            <unit id="org.apache.commons.net" version="3.2.0.v201305141515"/>
            <unit id="org.apache.xalan" version="2.7.1.v201005080400"/>
            <unit id="org.apache.xerces" version="2.9.0.v201101211617"/>
            <unit id="org.apache.xml.resolver" version="1.2.0.v201005080400"/>
            <unit id="org.apache.xml.serializer" version="2.7.1.v201005080400"/>
            <unit id="java_cup.runtime" version="0.0.0"/>
        </location>

    </locations>
    <environment>
        <arch>x86_64</arch>
        <os>win32</os>
        <ws>win32</ws>
        <nl>en_US</nl>
    </environment>
</target>