最近学习jsonengine, 在HowToInstall新的jsonengine到GAE(Google App Engine)是遇到了一些编译和上传错误,现总结如下。
环境搭建:
1)下载并安装JDK7. 最新的GAE版本推荐使用JDK7.
2) 下载GAE的SDK-java版本,参考App Engine SDK for Java, 并解压到磁盘,例如解压到D:\appengine-java-sdk-1.8.0,这里SDK版本号为1.8.0
3)下载jsonengine并解压,这里放到了D:\jsonengine
4)编译jsonengine
> cd appengine-java-sdk-dir\bin > dev_appserver.cmd jsonengine-dir\war此时编译可能会出错,提示“...You probably want to enable concurrent requests...” ,此时需要在配置文件appengine-web.xml文件中添加 threadsafe字段,并置为true.
...
<application>jsonleen</application>
<version>1.0.0</version>
<threadsafe>true</threadsafe>
...
5) 上传jsonegine
> cd appengine-java-sdk-dir\bin > appcfg.cmd update jsonengine-dir\war次过程中遇到 两个错误:
a. JSP编译错误,提示
Unable to update:
com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files.
at com.google.appengine.tools.admin.Application.compileJsps(Application.java:779)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:617)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:385)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:55)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:1281)
at com.google.appengine.tools.admin.AppCfg.executeAction(AppCfg.java:315)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:202)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:118)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:114)
com.google.appengine.tools.admin.AdminException: Unable to update app: Failed to compile jsp files.
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:391)
at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:55)
at com.google.appengine.tools.admin.AppCfg$UpdateAction.execute(AppCfg.java:1281)
at com.google.appengine.tools.admin.AppCfg.executeAction(AppCfg.java:315)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:202)
at com.google.appengine.tools.admin.AppCfg.<init>(AppCfg.java:118)
at com.google.appengine.tools.admin.AppCfg.main(AppCfg.java:114)
Caused by: com.google.appengine.tools.admin.JspCompilationException: Failed to compile jsp files.
at com.google.appengine.tools.admin.Application.compileJsps(Application.java:779)
at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:617)
at com.google.appengine.tools.admin.AppAdminImpl.doUpdate(AppAdminImpl.java:385)
... 6 more
解决办法是:修改脚本appcfg.cmd,将
java -Xmx1100m -cp "%~dp0\..\lib\appengine-tools-api.jar" com.google.appengine.tools.admin.AppCfg %*
调整为
"D:\Program Files\Java\jdk1.7.0_21\bin\java" -Xmx1100m -cp "%~dp0\..\lib\appengine-tools-api.jar" com.google.appengine.tools.admin.AppCfg %*
即实际指定java的路径,而不是自动搜索,参考http://fyhao.com/2010/12/computer-and-it/appengine/google-appengine-jsp-compilation-problem/
b. 版本号错误.
由于在步骤4)中将version字段由默认的1修改成了1.0.0. 由于1.0.0不符合GAE规范,导致后面上传时出现了500 Internal Server Error错误.
...
com.google.appengine.tools.admin.HttpIoException: Error posting to URL: https://appengine.google.com/api/appversion/crea
te?app_id=jsonleen&version=1.0.0&
500 Internal Server Error
...
解决办法:修改版本号为1. 规范要求版本号字符可以为字母、数字或连接符(-).