AppEngine - 无法编译JSP

时间:2016-05-19 06:44:25

标签: java maven google-app-engine java-8 classpath

我正在使用教程创建留言簿Web应用程序,每当我尝试连接到localhost:8080时,我都会收到以下错误:

  HTTP ERROR 500

Problem accessing /. Reason:

    Unable to compile class for JSP: 

An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files

Stacktrace:
Caused by:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 1 in the generated java file
The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files

Stacktrace:
    at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
    at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:349)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at com.google.appengine.tools.development.PrivilegedJspServlet.access$101(PrivilegedJspServlet.java:23)
    at com.google.appengine.tools.development.PrivilegedJspServlet$2.run(PrivilegedJspServlet.java:61)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.appengine.tools.development.PrivilegedJspServlet.service(PrivilegedJspServlet.java:58)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327)
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
    at com.google.appengine.tools.development.StaticFileUtils.serveWelcomeFileAsForward(StaticFileUtils.java:82)
    at com.google.appengine.tools.development.LocalResourceFileServlet.maybeServeWelcomeFile(LocalResourceFileServlet.java:260)
    at com.google.appengine.tools.development.LocalResourceFileServlet.doGet(LocalResourceFileServlet.java:120)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:59)
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:49)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:502)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

我使用Apache Maven版本3.3.9和jdk1.8.0_92。我能够成功mvn appengine:devserver,并且说Dev App Server is now Running。我已经看到了涉及Tomcat的相关问题,但他们并没有提供帮助。我有点坚持做什么,并且我不太熟悉这个过程,因为我遵循教程。关于我能做些什么来解决这个问题的任何想法?以下是我正在尝试的link(请注意,这是一个已归档的旧链接。)

6 个答案:

答案 0 :(得分:4)

我和你有完全相同的问题。对我来说,在我将JDK从1.8改为1.7后,问题就消失了。 (使用jdk 1.8时编译级别为1.7)。我不知道它是否对你有帮助。

答案 1 :(得分:4)

  • 确保 mvn -version 的输出显示1.7版本的Java版本:
    mvn -version Java version: 1.7.0_101, vendor: Oracle Corporation ...
  • 如果您在此处显示Java版本1.8或其他版本,则必须更改PATH环境 JAVA_HOME 以指向您的1.7文件夹...这是mvn运行java的地方,您可以在此处查看linux或Mac终端: echo $JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64

[ link to how to add to your PATH on Windows, Mac, or Linux ]

尝试上述操作并重新运行 mvn clean install
mvn appengine:devserver
命令...希望这有帮助。< / p>

答案 2 :(得分:0)

我遇到了同样的问题,但我有一个观察可能有助于解决这个问题。今天早上我使用Maven原型构建了留言簿项目:      role_name 在以这种方式创建项目之后,以下工作立即生效:     mvn archetype:generate -Dappengine-version=1.9.37 .... Jetty启动了,我可以在浏览器中访问留言簿应用程序。

在最初的成功之后,我试图让它在Eclipse中运行。在这样做时,我还发现我同时使用不同的JDK版本,我尝试纠正这个问题。我没有成功使用Eclipse。之后我试着回到mvn appengine:devserver。只有这样我才遇到上述问题。

我尝试删除.m2目录,其中Maven存储它下载的依赖项。我还尝试使用mvn appengine:devserver构建一个新副本。这些行动没有帮助。

我有以下类路径:

mvn archetype:generate ...

我正在使用JDK 1.8.0_91和Maven 3.3.3

编辑:当我写上面文字时,我是在Windows下开发的。 2016年5月28日,我在32位笔记本电脑上安装了Ubuntu 14。使用i88.ca的答案,我得到了它的工作。

答案 3 :(得分:0)

我和你有同样的问题,没有一个答案对我有帮助,所以这里是我的解决方案。此解决方案可以是如何在JDK 7上运行Google AppEngine教程以在Java 8上以相同方式工作的一般方法。另请注意,Google Cloud SDK和Google Cloud Platform是两种不同的安装方式。我也在实验期间使用Windows 10 x64来获取信息。

此问题与您提到的 - link非常相似,但在这种情况下,您的Jetty服务器版本不支持JDK 8.有一个关于此问题的Google教程 - link。首先,我尝试使用Jetty 6.1.x遇到同样的问题,看到Jetty服务器版本不支持JDK 8(默认的AppEngine Dev配置来自Intellij 2016.1.2)。后来我尝试了Jetty 9.3.x并且它与JDK 8一起正常工作。虽然现在当我使用Jetty服务器9.3时,我不使用appengine:devserver来模拟用户和数据存储API以便教程工作。所以我切换到gcloud提供的模拟器 - link,但gcloud目前缺少在教程中使用的用户API模拟器,但由appengine:devserver提供。有趣的是,当我开始重新实施教程时,我发现其他开发人员已经这样做了 - link

以下是使用Maven 3.3.9,JDK 8,Jetty 9.3和gcloud模拟器运行Guestbook tutorial(最初用于JDK 7)的方法

  1. [可选]正确解决Windows注册表问题 - link
  2. 安装Python 2.7 - link
  3. 安装Google Cloud Platform - link在安装期间启用测试版功能。
  4. 完成本教程,该教程与Guestbook应用程序相同,但正确实现了Java 8支持 - Updated Guestbook tutorial
  5. <强>结论

    如果https://cloud.google.com/appengine/docs

    上缺少github上的更新教程,请查找

答案 4 :(得分:0)

JDK版本需要为1.7。 pom.xml中的SDK版本无需更改。我已经尝试了所有SDK版本的组合,唯一有效的是将$ JAVA_HOME设置为1.7并将版本保留在pom.xml中(1.9.24)。我的初始jdk版本是1.8,应用程序失败了&#34;无法用JSP编译类#34;错误

答案 5 :(得分:0)

我必须添加

<runtime>java8</runtime>
在appengine-web.xml文件中

使其工作。这是最新的android studio版本和最新的appengine java sdk - appengine-java-sdk-1.9.59