2017-10-06 70 views
2

我安裝了Spring Tool Suite(3.9.0版)。它之前工作正常。安裝JDK 9後,我無法啓動Spring Tool Suite。安裝JDK 9後無法啓動Spring Tool Suite

我可以看到下方,雖然錯誤日誌:

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:844) 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:496)

是因爲JDK 9的真問題?請指出我解決問題的正確方向。

謝謝。

+0

[This answer](https://stackoverflow.com/a/46515247/1746118)我最近提出的可能會幫助你理解失敗的原因。儘管框架可能不同,但其原因是相同的。 – nullpointer

+2

大家好, 我自己解決了這個問題。已經提到了Eclipse論壇關於如何爲JDK9配置Eclipse。必須在STS.ini(或eclipse.ini for Eclipse)中添加以下vmargs:** - add-modules = ALL-SYSTEM ** 添加STS.ini或eclipse.ini文件後,將如圖所示如下: -vmargs -Dosgi.requiredJavaVersion = 1.8 --add-modules = ALL-SYSTEM 請查看[link] [1]瞭解更多信息。 謝謝。 [1]:https://wiki.eclipse.org/Configure_Eclipse_for_Java_9#Configure_Eclipse_for_Java_9_modules –

回答

2

在Java 9中,javax.annotation包位於Java 9運行庫中默認不可見的模塊中。解決方法的確是告訴Java運行時顯式加載該模塊。

這意味着許多平臺可能需要更新其啓動配置,如果他們想要在Java 9運行時之上運行。或者,他們將不得不「模塊化」他們的代碼並將javax.annotation包導入他們的模塊中。

相關問題