安装JDK 9

时间:2017-10-06 06:38:11

标签: java spring eclipse java-9

我安装了Spring Tool Suite(版本3.9.0)。它以前工作得很好。安装JDK 9后,我无法启动Spring Tool Suite。

我可以在错误日志中看到以下内容:

  

java.lang.NoClassDefFoundError:javax / annotation / PreDestroy at   org.eclipse.e4.core.internal.di.InjectorImpl.disposed(InjectorImpl.java:450)   在   org.eclipse.e4.core.internal.di.Requestor.disposed(Requestor.java:156)   在   org.eclipse.e4.core.internal.contexts.ContextObjectSupplier $ ContextInjectionListener.update(ContextObjectSupplier.java:78)   在   org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:111)   在   org.eclipse.e4.core.internal.contexts.TrackableComputationExt.handleInvalid(TrackableComputationExt.java:74)   在   org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:178)   在   org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.dispose(EclipseContextOSGi.java:99)   在   org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.bundleChanged(EclipseContextOSGi.java:141)   在   org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908)   在   org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)   在   org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)   在   org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:213)   在   org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:120)   在   org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:112)   在   org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:168)   在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 at   org.eclipse.osgi.internal.framework.EquinoxBundle $ SystemBundle $ EquinoxSystemModule $ 1.run(EquinoxBundle.java:165)   在java.base / java.lang.Thread.run(Thread.java:844)引起:   java.lang.ClassNotFoundException:javax.annotation.PreDestroy不能   可以在org.eclipse.e4.core.di_1.6.100.v20170421-1418找到   org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:433)   在   org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)   在   org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)   在   org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)   在java.base / java.lang.ClassLoader.loadClass(ClassLoader.java:496)

这个问题真的是因为JDK 9吗?请指出正确的方向来解决问题。

感谢。

2 个答案:

答案 0 :(得分:5)

是的,这是由于Java 9. Eclipse中可能存在错误修复(请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=525583)但是现在您可以使用解决方法:在eclipse中向启动配置添加--add-modules=ALL-SYSTEM的.ini。有关完整示例,请参阅https://bugs.eclipse.org/bugs/show_bug.cgi?id=493761

答案 1 :(得分:2)

在Java 9中,javax.annotation包位于Java 9运行时中默认不可见的模块中。解决方法确实是告诉Java运行时明确加载该模块。

这意味着如果想要在Java 9运行时之上运行,许多平台可能必须更新其启动配置。或者,他们必须“模块化”他们的代码并在他们的模块中导入javax.annotation包。