Debian

如何使用 OpenJDK 10 執行 Apache Directory Studio?

  • August 9, 2018

我已經在我的 PureOS 系統上安裝了 OpenJDK 10 JRE:

$ sudo apt install default-jre
$ java --version
openjdk 10.0.2 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Debian-1)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Debian-1, mixed mode)

我現在正在嘗試按照安裝文件下載並執行 Apache Directory Studio

Apache Directory Studio 至少需要:

  • 最近的 Linux 發行版。它已在 Ubuntu 和 Arch Linux 上成功測試。
  • Java 執行時環境 7 或更高版本。

$$ Click the “ApacheDirectoryStudio” file $$

~/.ApacheDirectoryStudio/.metadata/.log但是我在(下面)中遇到錯誤。初步搜尋表明這種錯誤可能表明我的 JRE 存在兼容性問題。如何讓 ADS 與我的 JRE 一起執行?



!SESSION 2018-08-09 15:24:18.612 -----------------------------------------------
eclipse.buildId=unknown
java.version=10.0.2
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Framework arguments:  /studio-rcp/resources/icons/linux/studio.xpm
Command-line arguments:  -os linux -ws gtk -arch x86_64 /studio-rcp/resources/icons/linux/studio.xpm

!ENTRY org.eclipse.osgi 4 0 2018-08-09 15:24:19.973
!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:386)
   at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:294)
   at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
   at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createDefaultHeadlessContext(E4Application.java:490)
   at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createDefaultContext(E4Application.java:504)
   at org.eclipse.e4.ui.internal.workbench.swt.E4Application.createE4Workbench(E4Application.java:203)
   at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:632)
   at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
   at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610)
   at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
   at org.apache.directory.studio.Application.start(Application.java:51)
   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:564)
   at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
   at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
   at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
   at org.eclipse.equinox.launcher.Main.main(Main.java:1492)
Caused by: java.lang.NoClassDefFoundError: javax/annotation/PostConstruct
   at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:151)
   at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:375)
   ... 23 more
Caused by: java.lang.ClassNotFoundException: javax.annotation.PostConstruct cannot be found by org.eclipse.e4.core.di_1.6.1.v20160712-0927
   at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:410)
   at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372)
   at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364)
   at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161)
   at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
   ... 25 more

!ENTRY org.eclipse.e4.ui.workbench 4 0 2018-08-09 15:24:19.988
!MESSAGE FrameworkEvent ERROR
!STACK 0
java.lang.NoClassDefFoundError: javax/annotation/PreDestroy
   at org.eclipse.e4.core.internal.di.InjectorImpl.disposed(InjectorImpl.java:426)
   at org.eclipse.e4.core.internal.di.Requestor.disposed(Requestor.java:154)
   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:176)
   at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.dispose(EclipseContextOSGi.java:106)
   at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.bundleChanged(EclipseContextOSGi.java:139)
   at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:903)
   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:156)
   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.1.v20160712-0927
   at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:410)
   at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372)
   at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364)
   at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161)
   at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
   ... 21 more

它似乎不支持 Java 10。根據Apache directory Studio 上的 Apache 自己的常見問題解答

Studio 需要 Java 7 或 Java 8(推薦)。尚不支持 Java 9。

您需要安裝 OpenJDK 8 JRE:

sudo apt install openjdk-8-jre

而且,由於您已經安裝了 OpenJDK 10,請修改 ApacheDirectoryStudio.ini:

...
-vm
/usr/lib/jvm/java-8-openjdk-amd64/bin/java
-vmargs
-Dosgi.requiredJavaVersion=1.8

您現在可以點擊 ApacheDirectoryStudio 文件並啟動應用程序。

引用自:https://unix.stackexchange.com/questions/461550