【问题标题】:Unable to launch Spring Tool Suite after installing JDK 9 [duplicate]安装 JDK 9 后无法启动 Spring Tool Suite [重复]
【发布时间】:2018-03-17 21:40:37
【问题描述】:

我已经安装了 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) 在 org.eclipse.osgi.container.Module.doStop(Module.java:634) 在 org.eclipse.osgi.container.Module.stop(Module.java:498) 在 org.eclipse.osgi.container.SystemModule.stop(SystemModule.java:202) 在 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 造成的吗?请指出正确的方向来解决问题。

谢谢。

【问题讨论】:

  • This answer我最近做的可能会帮助您了解失败的原因。尽管框架可能不同,但原因是相同的。
  • 大家好,我已经自己解决了这个问题。已参考 Eclipse 论坛关于如何为 JDK9 配置 Eclipse。必须在 STS.ini(或 Eclipse.ini 为 Eclipse)中添加以下 vmargs:--add-modules=ALL-SYSTEM 添加 STS.ini 或 eclipse.ini 文件后将如下所示如下所示: -vmargs -Dosgi.requiredJavaVersion=1.8 --add-modules=ALL-SYSTEM 请查看 [链接][1] 了解更多信息。谢谢。 [1]:wiki.eclipse.org/…

标签: java spring eclipse java-9


【解决方案1】:

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

【讨论】:

  • 谢谢...在我的 STS.ini 文件中进行了相同的更改以解决问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2017-01-24
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多