我在简化的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类文件的字节序列应以此开头。
我只在主题上找到this和this,这使我相信在编写或读取类文件期间编码出错。
这是问题吗?我如何强制Maven使用例如读取/写入类UTF-8编码?
什么是好的编码?
我的java文件都以相同的方式编码:Eclipse表示ISO-8859-1,Notepad ++表示ANSI。
PS:我在Windows机器上。
最佳答案
正如Joakim Erdfeld的answer所暗示的,其中一个插件摆弄了构建。
罪魁祸首是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/