Play Framework Java exception UnsupportedClassVersionError: DocViewerPlugin : Unsupported major.minor version 52.0

我使用intelliJ开发java代码,使用play1.3.4,开始配置的jdk是1.8;开发完代码之后(中间有调试),由于生产的jdk是1.7,因此我在本地安装了1.7然后,把intellij的jdk修改为1.7,把环境变量也修改为jdk1.7.0, 然后在本地启动play start

接着,我通过localhost:10000访问我的项目,报错如下:

Oops: UnsupportedClassVersionError

An unexpected error occured caused by exception UnsupportedClassVersionError: DocViewerPlugin : Unsupported major.minor version 52.0

1. 网上找了下相关问题

经过一番折腾,在网络上搜索了下,有一篇文章这么说的:

Similarly if you compile Java program in Java 1.7 it will create class file with major version 51.0 and if you run that on lower java version you will get java.lang.unsupportedclassversionerror unsupported major.minor version 51.0

链接:http://www.java67.com/2012/10/how-to-fix-javalangunsupportedclassversionerror-major-minor-version-49-50-51.html

基本确定是开发时,使用了52版本(java8)进行了编译;而跑程序时,runtime environment使用了52以下(即java7)的jdk。jdk版本不一致

2. 分析哪里会导致版本不一致

既然是编译时版本的问题,那就可能是我使用jdk1.8时造成的问题,但是play框架不需要我编译呀,为何有问题呢。

但是,play不需要developer编译,不意味着不需要编译,编译工作在用户首次请求时,会自动编译。(这也是为何首次进入系统,非常慢的原因)

而且,play是增量编译,即如果你某部分代码不修改,那么即使你用jdk1.7运行这个项目,没修改的部分,play是不会重新编译class文件的。

问题就在这里了,play生成的 DocViewerPlugin 我肯定没修改,所以它是第一次使用jdk1.8(version 52)编译时,就生成的。因此,一直报错An unexpected error occured caused by exception UnsupportedClassVersionError: DocViewerPlugin : Unsupported major.minor version 52.0

cd /mnt/project/module/tmp/classes

$ ls

controllers  DocViewerPlugin.class  dtos  helpers  models

3. 确认问题

回到原始的报错,我发现一个现象,controllers/xxx/directory/Clusters 源文件在我随便修改后,play就会增量编译了,而编译时的jdk是1.7,因此,我修改了一下代码,就不报错了,因为Clusters.class被重新用jdk1.7编译了。

而DocViewerPlugin 还是继续报错,因为我没改它呀。

play编译后的class文件会放到play项目的第一层的tmp目录中,和app一级

./app

./tmp

./lib

4. 解决方法:

进入模块目录,停止play

play stop

直接删除tmp目录,然后重建目录:

mkdir -p tmp

重新启动play,再次请求系统,问题解决。

play start

----最开始报错

@72jjhafbm

Internal Server Error (500) for request GET /

Oops: UnsupportedClassVersionError

An unexpected error occured caused by exception UnsupportedClassVersionError: DocViewerPlugin : Unsupported major.minor version 52.0

play.exceptions.UnexpectedException: Unexpected Error

at play.Invoker$Invocation.onException(Invoker.java:245)

at play.Invoker$Invocation.run(Invoker.java:305)

at Invocation.HTTP Request(Play!)

Caused by: java.lang.UnsupportedClassVersionError: DocViewerPlugin : Unsupported major.minor version 52.0

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:800)

at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:152)

at play.classloading.ApplicationClassloader.loadClass(ApplicationClassloader.java:82)

at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

at play.plugins.PluginCollection.reloadApplicationPlugins(PluginCollection.java:204)

at play.Play.start(Play.java:482)

at play.Play.detectChanges(Play.java:641)

at play.Invoker$Invocation.init(Invoker.java:199)

... 1 more

[ERROR] 2017-01-09 18:06:35:846 [play.Logger][457] - Error during the 500 response generation

java.lang.UnsupportedClassVersionError: controllers/xxx/directory/Clusters : Unsupported major.minor version 52.0

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:800)

at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:152)

at play.classloading.ApplicationClassloader.loadClass(ApplicationClassloader.java:82)

at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

at play.classloading.ApplicationClasses.getAssignableClasses(ApplicationClasses.java:71)

at play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:459)

at play.templates.GroovyTemplateCompiler.endTag(GroovyTemplateCompiler.java:360)

at play.templates.TemplateCompiler.generate(TemplateCompiler.java:93)

at play.templates.TemplateCompiler.compile(TemplateCompiler.java:15)

另附:

J2SE 8 = 52,

J2SE 7 = 51,

J2SE 6.0 = 50,

J2SE 5.0 = 49,

JDK 1.4 = 48,

JDK 1.3 = 47,

JDK 1.2 = 46,

JDK 1.1 = 45

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容