我在简化的Eclipse项目中有一个简单的webapp。
我的pom.xml包含一些将Google的appengine-maven-plugin添加到构建插件的行。

当我运行mvn appengine:devserver时,我最终收到一条错误消息,告诉我无法加载我的课程:


[INFO]警告:启动处理程序时出错
[INFO] java.lang.ClassFormatError:类文件com / teamlazerbeez / http / di / StartupListener中的魔术值4022320623不兼容


该数字以十六进制表示为EFBFBDEF,显然不是CAFEBABE,Java类文件的字节序列应以此开头。
我只在主题上找到thisthis,这使我相信在编写或读取类文件期间编码出错。

这是问题吗?我如何强制Maven使用例如读取/写入类UTF-8编码?
什么是好的编码?
我的java文件都以相同的方式编码:Eclipse表示ISO-8859-1,Notepad ++表示ANSI。

PS:我在Windows机器上。

最佳答案

正如Joakim Erdfeldanswer所暗示的,其中一个插件摆弄了构建。
罪魁祸首是maven-war-plugin v2.3,但仅在以下情况下:

在满足以下条件的情况下,在简化的Ecipse项目(在pom.xml中列出了appengine-maven-plugin v1.7.5的地方)上启用GAE性质将中断运行mvn appengine:devserver


“默认输出文件夹”(在Eclipse项目的“构建路径”设置中)设置为src/main/webapp/WEB-INF/classes/(需要GAE Eclipse插件才能正常工作)
GAE插件决定将GAE罐子放在src/main/webapp/WEB-INF/lib/中,即使这些罐子已经在类路径中了。


总之,maven-war-plugin将.class和.jar文件从您的WEB-INF/中不正确地复制到了生成的.war文件中。在此过程中的某个地方,它会误编码这些文件。

关于java - GAE ClassFormatError:不兼容的魔术值4022320623 EFBFBDEF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15250226/

10-15 03:44