Eclipse Oxygen + Java 9

时间:2017-04-30 13:29:21

标签: java eclipse jvm java-9

为了测试一个项目是否已经为java 9做好准备,我在最后几个小时尝试了eclipse编译整个项目。
这是我做的:

我顺便在虚拟机中使用 XUbuntu ...

我安装了最新的openjdk-9-*软件包并删除了所有java 8软件包。

我下载了eclipse氧气的eclipse安装程序,并为Java SE安装了eclipse的默认版本。

我开始使用eclipse并从市场安装Java 9 Support Package并尝试导入gradle项目。

到目前为止,一切都或多或少都好了。 (有一些关于软件包的问题,​​并且eclipse抛出了一些错误消息,但总而言之有效。

项目已成功导入,但我收到此错误消息:

The project was not built since its build path is incomplete. Cannot 
find the class file for java.lang.Object. Fix the build path then try 
building this project

The type java.lang.Object cannot be resolved. It is indirectly 
referenced from required .class files

当它试图刷新工作区时,我收到以下错误消息:

Errors occurred during the build.
Errors running builder 'Java Builder' on project '<projectName>'.
java.lang.NullPointerException

标准输出充满FileNotFoundExceptions,如下所示:

java.io.IOException: /usr/lib/jvm/jrt-fs.jar not exist
    at jdk.internal.jrtfs.JrtFileSystemProvider.newFileSystem(java.base@9-internal/JrtFileSystemProvider.java:122)
    at jdk.internal.jrtfs.JrtFileSystemProvider.newFileSystem(java.base@9-internal/JrtFileSystemProvider.java:108)
    at java.nio.file.FileSystems.newFileSystem(java.base@9-internal/FileSystems.java:342)
    at java.nio.file.FileSystems.newFileSystem(java.base@9-internal/FileSystems.java:291)
    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.initialize(JRTUtil.java:204)
    at org.eclipse.jdt.internal.compiler.util.JrtFileSystem.<init>(JRTUtil.java:181)
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.getJrtSystem(JRTUtil.java:118)
    at org.eclipse.jdt.internal.compiler.util.JRTUtil.walkModuleImage(JRTUtil.java:147)
    at org.eclipse.jdt.internal.core.JavaProject.loadModulesInJimage(JavaProject.java:727)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:647)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:805)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:769)
    at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:577)
    at org.eclipse.jdt.internal.core.ClasspathChange.generateDelta(ClasspathChange.java:401)
    at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:2096)
    at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:473)
    at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:299)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:289)
    at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:152)
    at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:374)
    at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1469)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2253)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2267)
    at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:5624)
    at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:105)
    at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter$1.run(WorkbenchRunnableAdapter.java:118)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)

这并不令人惊讶,因为JDK(和相应的文件)位于usr/lib/jvm/java-9-openjdk-amd64。 为了解决这个问题,我创建了一个从/usr/lib/jvm/jrt-fs.jar指向/usr/lib/jvm/java-9-openjdk-amd64/jrt-fs.jar的符号链接,它消除了这些错误,但是eclipse搜索了/usr/lib/jvm/modules,但是它还没有存在。点。

忽略以下部分:
我尝试将--add-modules=java.se.ee(如java 9支持插件所示)附加到启动参数并添加它,之后在eclipse.ini文件的末尾没有做任何事情导致eclipse不再启动。

我的eclipse.ini文件:

-startup
plugins/org.eclipse.equinox.launcher_1.4.0.v20161219-1356.jar
--launcher.library
../../../.p2/pool/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.500.v20161213-1756
-product
org.eclipse.epp.package.java.product
-showsplash
org.eclipse.epp.package.common
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vm
/usr/lib/jvm/java-9-openjdk-amd64/bin/ #Changing this to /usr/<folders>/bin/java changed nothing
-install
/home/robin/eclipse/java-oxygen/eclipse
-vmargs
-Dosgi.requiredJavaVersion=1.8
-XX:+UseG1GC
-XX:+UseStringDeduplication
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
-Declipse.p2.max.threads=10
-Doomph.update.url=http://download.eclipse.org/oomph/updates/milestone/latest
-Doomph.redirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/
#--add-modules=java.se.ee
#Appending this command line argument here causes eclipse to not start - "Could not create JVM"
#This argument can of course also be passed via the command line directly
#But this changes nothing

4 个答案:

答案 0 :(得分:1)

修改eclipse.ini并将-vm参数设置为指向/usr/lib/jvm/java-9-openjdk-amd64/bin/java

答案 1 :(得分:1)

我有同样的问题。 Eclipse在JDK根目录中找不到jrt-fs.jar。尝试使用Java 9 JRE运行项目。完整的逐步解决方案描述here

答案 2 :(得分:0)

您也可以尝试使用Java 9逐步官方配置Eclipse。 Configure Eclipse for Java 9

答案 3 :(得分:0)

Linux Mint with Oxygen中的openjdk-9也有同样的问题。
我注意到,我的发行版的回购版本(版本:9-internal)提供的jdk版本在启动器选项中有很大不同。
例如,无法识别选项--add-modules = ALL-SYSTEM,并且如前所述,它阻止了Eclipse的启动。
在eclipse.ini中将该选项更改为-addmods ALL-SYSTEM,可以使氧气释放正常(代表新行)。
关于其他问题,我尝试创建指向jrt-fs.jar和modules目录的符号链接,这些链接使氧气感到抱怨。一切似乎都不错,但印象并没有持续。
返回类型解析(对象,字符串等)的问题。我无法纠正这个问题。我对jdk库和modulepath的设置很好,但是没有加载/显示任何模块,这是我尚未解决的问题。
我希望其中一些信息可以有所帮助。