【问题标题】:Run Vaadin 8.1 app under Java 9 prerelease in IntelliJ 2017.2.2在 IntelliJ 2017.2.2 中的 Java 9 prerelease 下运行 Vaadin 8.1 应用程序
【发布时间】:2017-08-18 23:02:09
【问题描述】:

在 IntelliJ 2017.2.2 中,如果 Project Structure > Project SDK 设置为Java 1.8。

如果 Project Structure > Project SDK 设置为 Java 9,我会在 FillIn 附近收到此编译器错误,而关于 filling 的断言错误与 Vaadin MouseEvents 有关。我试过谷歌搜索,但没有找到任何线索。

Information:java: An exception has occurred in the compiler (9). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
Information:java:   at jdk.compiler/com.sun.tools.javac.code.ClassFinder.fillIn(ClassFinder.java:340)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.ClassFinder.complete(ClassFinder.java:285)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.Symbol.complete(Symbol.java:633)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:1314)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.Symbol$ClassSymbol.flags(Symbol.java:1248)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:405)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.isAccessible(Resolve.java:389)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.findImmediateMemberType(Resolve.java:2170)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.findMemberType(Resolve.java:2225)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Resolve.findIdentInType(Resolve.java:2403)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.selectSym(Attr.java:3588)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:3453)
Information:java:   at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2104)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:653)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribType(Attr.java:713)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribType(Attr.java:706)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribBase(Attr.java:859)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$AbstractHeaderPhase.attribSuperTypes(TypeEnter.java:669)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$HierarchyPhase.runPhase(TypeEnter.java:742)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$Phase.doCompleteEnvs(TypeEnter.java:270)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$HierarchyPhase.complete(TypeEnter.java:785)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$HierarchyPhase.doCompleteEnvs(TypeEnter.java:730)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$Phase.completeEnvs(TypeEnter.java:245)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.TypeEnter$Phase.completeEnvs(TypeEnter.java:254)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.TypeEnter.complete(TypeEnter.java:195)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.Symbol.isInterface(Symbol.java:393)
Information:java:   at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.readMethod(ClassReader.java:2353)
Information:java:   at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.readClass(ClassReader.java:2641)
Information:java:   at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.readClassBuffer(ClassReader.java:2706)
Information:java:   at jdk.compiler/com.sun.tools.javac.jvm.ClassReader.readClassFile(ClassReader.java:2719)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.ClassFinder.fillIn(ClassFinder.java:348)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.complete(Type.java:1139)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.getTypeArguments(Type.java:1065)
Information:java:   at jdk.compiler/com.sun.tools.javac.code.Type$ClassType.isErroneous(Type.java:1095)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Check.checkNonCyclicInternal(Check.java:2316)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Check.checkNonCyclicInternal(Check.java:2327)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Check.checkNonCyclicInternal(Check.java:2330)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Check.checkNonCyclicInternal(Check.java:2323)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Check.checkNonCyclic(Check.java:2277)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.checkBase(Attr.java:901)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Attr.attribBase(Attr.java:860)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Enter.complete(Enter.java:577)
Information:java:   at jdk.compiler/com.sun.tools.javac.comp.Enter.main(Enter.java:554)
Information:java:   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:1052)
Information:java:   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:923)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
Information:java:   at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:190)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:473)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:328)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:255)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:208)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1260)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:937)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1009)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:900)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:733)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:385)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:192)
Information:java:   at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:138)
Information:java:   at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:295)
Information:java:   at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:125)
Information:java:   at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:236)
Information:java:   at org.jetbrains.jps.service.impl.SharedThreadPoolImpl.lambda$executeOnPooledThread$0(SharedThreadPoolImpl.java:42)
Information:java:   at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
Information:java:   at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
Information:java:   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
Information:java:   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
Information:java:   at java.base/java.lang.Thread.run(Thread.java:844)
Information:java: Errors occurred while compiling module 'vnine'
Information:javac 9 was used to compile java sources
Information:Module "vnine" was fully rebuilt due to project configuration/dependencies changes
Information:2017-08-18, 15:40 - Compilation completed with 2 errors and 0 warnings in 1s 866ms
Error:java: java.lang.AssertionError: Filling jar:file:///Users/basilbourque/.m2/repository/com/vaadin/vaadin-server/8.1.2/vaadin-server-8.1.2.jar!/com/vaadin/ui/Component$Event.class during JarFileObject[/Users/basilbourque/.m2/repository/com/vaadin/vaadin-server/8.1.2/vaadin-server-8.1.2.jar:/com/vaadin/event/MouseEvents$ClickEvent.class]
Error:java:     at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:162)

那么,两个问题:

  • 可以让 IntelliJ + Vaadin + Tomcat 在 Java 9 下工作吗? (也就是说,as 运行 Java 9 项目 - 确实 Java 9 上运行,但仅作为 Java 8 项目运行)
  • 如果是这样,在我使用全新的未修改 Vaadin 应用程序 Maven 原型的情况下可能会出现什么问题?

【问题讨论】:

  • 能否请您分享您用于尝试的代码。
  • @nullpointer 在我自己的项目因上述设置失败后,我尝试了一个从第一个 Maven 原型listed here 生成的全新项目。我从来没有接触过 Java 代码,甚至没有打开过 Java 文件。
  • 遗憾的是,问题的答案似乎还可能是 NO。尝试使用 Jetty 而不是 Tomcat 创建项目。能够打包战争。但是 .war 在 tomcat 中也不起作用(即使在战争被放置在 webapps 之后也得到 404),另一方面,码头最终以 another issue!
  • 终于找到了解决方案。已更新答案。
  • 查看 Vaadin 博文:More on Java 9 compatibility

标签: tomcat8 java-9 vaadin8


【解决方案1】:

内联为时间线

  • 在我使用全新的未修改的 Vaadin 应用程序 Maven 原型的情况下可能会出现什么问题?

为了具体找到您案例的根本原因,我们肯定需要您在代码定义方面尝试过的更多细节。

  • 可以让 IntelliJ + Vaadin + Tomcat 在 Java 9 下工作吗?*

On 22 August 2017

是的。您可以使这种特定组合发挥作用。在解决了我在Unable to process file module-info.class within a Java9 project results in ClassFormatException 的问题后,我可以让使用mvn package 创建的战争最终与tomcat 一起运行。

详情:您需要使用兼容 Java 9 的 Tomcat 版本。 (在我的情况下为apache-tomcat-9.0.0.M26)并将其配置为以

开头

Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/

服务器启动后,您可以访问应用程序@localhost:8080/vaadinjavanine/,其中vaadinjavanine 是我的tomcat 的webapps 文件夹中的war 文件名。

On 21 August 2017

遗憾的是,该组合的特定答案仍然是。我相信目前还不可能使这种组合发挥作用。

码头服务器

这是我更新的sample application,无论我的项目 SDK 设置为Java1.8 或 Java9。它的工作原理是这样的:

这是在通过升级到 asmasm-commons 库中的 6.0_BETA 并使用在项目中使用的本地构建的自定义 9.4.7-SNAPSHOT 克服 #jetty.project/1758 后实现的(提交 - #e34415. )

Tomcat 服务器

  1. 按照推荐的创建战争的方式,我使用以下命令创建了应用程序战争(在我的情况下为<finalName>vaadinjavanine</finalName>):

    mvn package
    
  2. 确保 CATALINA_HOME/webapps 包含此文件。基本复制了。

  3. 在默认端口上启动tomcat以访问应用程序的url:localhost:8080/vaadinjavanine/

但最终在当前链中发现了另一个问题: Unable to process file module-info.class within a Java9 project results in ClassFormatException


On 20 August 2017

问题的答案是。 我所做的是,按照getting started guide,尝试从基于java9 的零开始创建一个基于maven 的vaadin 应用程序。使用以下配置:

apache-tomcat-8.0.22 

intelliJ-IDEA 2017.2.2

<vaadin.version>8.1.2</vaadin.version>

Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T01:09:06+05:30)
Maven home: /usr/local/Cellar/maven/3.5.0/libexec
Java version: 9, vendor: Oracle Corporation (jdk-9+181)

使用指南共享中的vaadin-archetype-application 创建了一个 maven 模块。更新了

  1. 带有

    的 pom.xml
    <maven.compiler.source>1.9</maven.compiler.source>
    <maven.compiler.target>1.9</maven.compiler.target>
    
  2. 向正在开发的模块添加了module-info.java

我能够在相同的情况下执行mvn package,但运行mvn jetty:run 来运行应用程序最终实现MultiException | java.lang.RuntimeException: Error scanning UI and Servlet class

【讨论】:

  • 感谢您的努力和更新。由于尚未推荐 Tomcat 9,因此运行主流的 Tomcat 8.5.x 的答案仍然是“否”。至于你的第一句话,我的情况根本不具体。我只是运行了自动创建的初始应用程序,它是问题中记录的 Vaadin.com 提供的 Maven 原型。根本没有我自己的代码。
  • 仅供参考:请参阅 Vaadin 博客文章:More on Java 9 compatibility
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多