今天在sae上部署了一个项目,结果总是出现503错误:service unavailable,然后jvm出现了一大串错误日志,如下
JAVA_SAE_Fatal_error: Failed startup of context c.s.s.w.SaeWebAppContext{/1/hechengtupian,file:/data1/jetty_work/509/hechengtupian/jetty-0.0.0.0-10446-hechengtupian.war-_1_hechengtupian-any-/webapp/},/data1/www/htdocs/509/hechengtupian/1/hechengtupian.warorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Invocation of init method failed; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.image.controller.ImageController] for bean with name 'imageController' defined in file [/data1/jetty_work/509/hechengtupian/jetty-0.0.0.0-10446-hechengtupian.war-_1_hechengtupian-any-/webapp/WEB-INF/classes/com/image/controller/ImageController.class]: problem with class file or dependent class; nested exception is java.lang.UnsupportedClassVersionError: com/image/controller/ImageController : Unsupported major.minor version 51.0|Related cause: org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.image.controller.ImageController] for bean with name 'imageController' defined in file [/data1/jetty_work/509/hechengtupian/jetty-0.0.0.0-10446-hechengtupian.war-_1_hechengtupian-any-/webapp/WEB-INF/classes/com/image/controller/ImageController.class]: problem with class file or dependent class; nested exception is java.lang.UnsupportedClassVersionError: com/image/controller/ImageController : Unsupported major.minor version 51.0 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1486) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowir yq30.javaruntime
然后我就在sae官方论坛上发帖,然后管理员一句话点拨了我:Unsupported major.minor version 51.0!jdk版本不对,sae支持的jdk是1.6。
major.minor version,它相当于一个软件的主次版本号,只是在这里是标识的一个Java Class的主版本号和次版本号。
错误原因找到了,需要使用java6编译项目,才可以在sae平台上正常运行。接下来就是如何解决问题了。
首先你要下载java6,然后安装上,放心吧java6可以和java7同时安装在电脑上,不用担心冲突的问题,只要安装的时候目录不哟啊冲突就好了。
然后打开eclipse,选择preferences->java->install jres 点击 add,然后把选择standerd VM,配置好路径,然后把java6选为默认。
然后选择java->complier 把编译版本修改为1.6,这样就可以了。
这时候可能你自己的项目在本地运行的时候会起不来,然后显示错误:Project facet Java version 1.7 is not supported.这时候你需要调整你的项目的tomcat运行的java版本,方法也很简单:右键项目->propertiy->project facets ,看到那个java 1.7了吗?对就是它,把它修改成1.6,现在你的项目就可以运行起来了。
最后不得不吐槽一下sae和bae这两个云平台:sae让我很不爽的一点是java中svn功能太弱了,svn要上传的是war包,而不是项目文件,每次都要上传那么多文件,累不累啊,而且这样根本没有使用svn的意义嘛。而bae让我不爽的一点是图片处理的能力太弱了,禁用了awt.image包中的函数,必须使用bae自己的服务,结果bae自己的图片处理能力可以说几乎为0,只有最基本的功能。
吐槽归吐槽,在这里希望国内云平台做的越来越好吧,至少sae和bae现在基本上都是免费的,这点还是比较赞的。