Search code examples
javaeclipseeclipse-rcpe4

Eclipse E4 on Java 12


I'm migration our Eclipse E4 application to jre12 (8 to 12 migration). Everything is working fine when I run the application in my dev envirimont from inside Eclipse. When I build the application using Tycho I'm getting an error when starting the application.

!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$1.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

The javax.annotations is configured as a required plugin in our custom plugin. Also I added javax.annotations to our maven file. When I check the libraries inside the builded project the javax.annotation_1.2.0.v201602091430.jar is include inside the plugins directory.

I tried using the module java.se.ee that has been answered in Why won't eclipse oxygen start (for the first time)?. And still the eclipse E4 application cannot find the dependency.

Can someone help me with this?

My target repositories that are in my target file are (full file can be view here 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 file looks like:

#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
[email protected]/../p2
eclipse.application=org.eclipse.e4.ui.workbench.swt.E4Application

Solution

  • Changed my target file to the new format and now it works. Target file looks like:

    <?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>