如何使用OpenJDK 9修复Eclipse

我在Ubuntu 17.10中安装了OpenJDK 9。 我想开始用Java开发,我确实设置了JAVA_HOME变量并做了一些我在互联网上找到的东西。 我可以编译Java程序并运行它,但我无法安装IDE,这是非常必要的。

错误消息是:

发生了错误。 请参阅日志文件/home/erik/.eclipse/org.eclipse.platform_3.8_155965261/configuration/1531145712071.log。

日志文件包含:

!SESSION 2018-07-09 16:15:11.911 ----------------------------------------------- eclipse.buildId=debbuild java.version=9-Ubuntu java.vendor=Oracle Corporation BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US Command-line arguments: -os linux -ws gtk -arch x86_64 !ENTRY org.eclipse.equinox.simpleconfigurator 4 0 2018-07-09 16:15:12.423 !MESSAGE FrameworkEvent ERROR !STACK 0 org.osgi.framework.BundleException: The bundle "org.eclipse.equinox.simpleconfigurator_1.0.301.dist [1]" could not be resolved. Reason: Missing Constraint: Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,J2SE-1.4 at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolverError(AbstractBundle.java:1332) at org.eclipse.osgi.framework.internal.core.AbstractBundle.getResolutionFailureException(AbstractBundle.java:1316) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:323) at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:390) at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1176) at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559) at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544) at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457) at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243) at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438) at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) !ENTRY org.eclipse.osgi 4 0 2018-07-09 16:15:12.429 !MESSAGE Bundle initial@reference:file:plugins/org.eclipse.equinox.simpleconfigurator_1.0.301.dist.jar was not resolved. !ENTRY org.eclipse.osgi 2 0 2018-07-09 16:15:12.435 !MESSAGE One or more bundles are not resolved because the following root constraints are not resolved: !SUBENTRY 1 org.eclipse.osgi 2 0 2018-07-09 16:15:12.435 !MESSAGE Bundle initial@reference:file:plugins/org.eclipse.equinox.simpleconfigurator_1.0.301.dist.jar was not resolved. !SUBENTRY 2 org.eclipse.equinox.simpleconfigurator 2 0 2018-07-09 16:15:12.435 !MESSAGE Missing required capability Require-Capability: osgi.ee; filter="(|(&(osgi.ee=CDC/Foundation)(version=1.1))(&(osgi.ee=JavaSE)(version=1.4)))". !ENTRY org.eclipse.osgi 2 0 2018-07-09 16:15:12.436 !MESSAGE The following is a complete list of bundles which are not resolved, see the prior log entry for the root cause if it exists: !SUBENTRY 1 org.eclipse.osgi 2 0 2018-07-09 16:15:12.436 !MESSAGE Bundle org.eclipse.equinox.simpleconfigurator_1.0.301.dist [1] was not resolved. !SUBENTRY 2 org.eclipse.equinox.simpleconfigurator 2 0 2018-07-09 16:15:12.436 !MESSAGE Missing required capability Require-Capability: osgi.ee; filter="(|(&(osgi.ee=CDC/Foundation)(version=1.1))(&(osgi.ee=JavaSE)(version=1.4)))". !ENTRY org.eclipse.osgi 4 0 2018-07-09 16:15:12.437 !MESSAGE Application error !STACK 1 java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini). at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180) 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:629) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584) at org.eclipse.equinox.launcher.Main.run(Main.java:1438) at org.eclipse.equinox.launcher.Main.main(Main.java:1414) 

来自默认Ubuntu存储库的Eclipse snap包非常适合Java编程,因为它与Java开发环境捆绑在一起。 要安装它,请打开终端并输入:

 sudo snap install eclipse --classic 

此命令将安装最新的Photon Release 4.8版Eclipse IDE for Java Developers,该版本于8天前更新。 Eclipse Photon JDT完全支持Java 9:

  • Eclipse的Java编译器(ECJ)实现了所有新的Java 9语言增强function。
  • 更新了支持Java模块的重要function,例如编译器,搜索和许多编辑器function。

虽然我总是喜欢来自Ubuntu发行版的软件包,但我为Eclipse做了一个例外,因为它(a)安装起来很简单,(b)必须以用户身份安装(不需要root或推荐),以及(c)它管理自己的更新和插件非常好 – 包括回滚等。

以下说明适用于所有Eclipse IDE(Java,C / C ++,Web,PHP等)。

  1. 安装JDK

     sudo apt install default-jdk 
  2. 从eclipse.org下载最新的Eclipse安装程序。 目前这是Eclipse Photon 。

  3. 将其解压缩到您选择的目录中

     mkdir -p ~/eclipse/installer tar -C ~/eclipse/installer -xzf ~/Downloads/eclipse-inst-linux64.tar.gz 
  4. 运行安装程序

     cd ~/eclipse/installer ./eclipse-inst 
  5. 选择您的IDE并按照提示操作

完成后,使用安装IDE的eclipse目录下的eclipse脚本启动IDE。

卸载任何Eclipse IDE,只需rm -r其安装目录即可。 如果你对kruft污染很着迷,那么rm -rf ~/.eclipse也是rm -rf ~/.eclipse