2017-08-21 68 views
3

尝试Run Vaadin 8.1 app under Java 9 prerelease in IntelliJ 2017.2.2我能够使用fresh project构建vaadinjavanine.war,并使用Jetty Server托管相同的文件。无法在Java9项目中处理文件module-info.class导致ClassFormatException

我最终试图将生成的war部署到tomcat服务器。但是,Tomcat服务器启动过程中,我得到以下异常:

21-Aug-2017 22:53:38.830 SEVERE [localhost-startStop-1] org.apache.catalina.startup.ContextConfig.processAnnotationsFile Unable to process file [/Library/Tomcat/apache-tomcat-8.0.22/webapps/vaadinjavanine/WEB-INF/classes/module-info.class] for annotations 
org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19 
    at org.apache.tomcat.util.bcel.classfile.Constant.readConstant(Constant.java:97) 
    at org.apache.tomcat.util.bcel.classfile.ConstantPool.<init>(ConstantPool.java:55) 
    at org.apache.tomcat.util.bcel.classfile.ClassParser.readConstantPool(ClassParser.java:177) 
    at org.apache.tomcat.util.bcel.classfile.ClassParser.parse(ClassParser.java:85) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:2011) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:1994) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsFile(ContextConfig.java:1988) 
    at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1939) 
    at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1897) 
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1149) 
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:771) 
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:305) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5066) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1768) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

21-Aug-2017 22:53:38.980 SEVERE [localhost-startStop-1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/vaadinjavanine]] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1768) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.UnsupportedClassVersionError: nullpointer/MyUI$MyUIServlet has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class nullpointer.MyUI$MyUIServlet) 
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2476) 
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:854) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1274) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157) 
    at org.atmosphere.util.IOUtils.isAtmosphere(IOUtils.java:381) 
    at org.atmosphere.cpr.ContainerInitializer.onStartup(ContainerInitializer.java:58) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5156) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    ... 10 more 

21-Aug-2017 22:53:38.981 SEVERE [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive /Library/Tomcat/apache-tomcat-8.0.22/webapps/vaadinjavanine.war 
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/vaadinjavanine]] 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:728) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:945) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1768) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

的异常状态无法处理module-info.class,这是从Java9的module-info.java产生。 有没有办法解决这个问题?或者这是否意味着tomcat尚未准备好用于java9模块呢?

:正在新手到Tomcat,我没有定制任何设置。让我知道,如果有其他东西可以分享进一步的信息。

回答

2

我不是Tomcat专家,但它看起来像模块描述符不是最严重的问题。该nexted异常包含此块:

造成的:java.lang.UnsupportedClassVersionErrornullpointer/MyUI$MyUIServlet已由较新版本的Java运行时(类文件版本53.0)的编制,这个版本的Java运行时只能识别类文件的版本了52.0(无法加载nullpointer.MyUI$MyUIServlet类)

这使得它看起来像你关于Java 8(类文件版本52)运行Tomcat,而你的代码与Java 9(类文件版本53)编制。

请确保在Java 9上运行Tomcat。此外,您可能需要尝试early access build of Tomcat 9,这是Java 9兼容性所必需的。

+0

有道理。尝试使用'jdk-9 + 181'执行'apache-tomcat-9.0.0.M26'并且修复了。 – nullpointer

相关问题