[英]GAE ClassFormatError: Incompatible magic value 4022320623 EFBFBDEF
我在一個mavenized Eclipse項目中有一個簡單的webapp。 我的pom.xml包含一些將Google的appengine-maven-plugin添加到構建插件的行。
當我運行mvn appengine:devserver
我最終得到一個錯誤,告訴我我的類無法加載:
[INFO]警告:啟動處理程序時出錯[INFO] java.lang.ClassFormatError:類文件中的不兼容的魔術值4022320623 com / teamlazerbeez / http / di / StartupListener
這個數字是EFBFBDEF
十六進制的,這東西顯然不是CAFEBABE
,該字節序列Java類文件應該開始。 我只在主題上找到了這個和這個 ,這讓我相信在編寫或讀取類文件時編碼出錯了。
這是問題嗎? 如何強制maven使用例如UTF-8編碼讀/寫類? 什么是好的編碼?
我的java文件都以相同的方式編碼:Eclipse表示ISO-8859-1,Notepad ++表示ANSI。
PS:我在一台Windows機器上。
正如Joakim Erdfeld的回答所暗示的那樣,其中一個插件正在擺弄這個版本。 罪魁禍首是maven-war-plugin v2.3,但僅限於以下情況:
在mavenized Ecipse項目上啟用GAE特性(其中appengine-maven-plugin v1.7.5在pom.xml
列出)將破壞運行mvn appengine:devserver
iff以下條件適用:
src/main/webapp/WEB-INF/classes/
(GAE Eclipse插件工作所需) src/main/webapp/WEB-INF/lib/
,即使這些jar已經在類路徑中。 總之,maven-war-plugin不正確地將.class和.jar文件從WEB-INF/
復制到生成的.war文件中。 在這個過程的某個地方,它錯誤地編碼了這些文件。
檢查你的src/main/webapp/WEB-INF
文件夾,它不應該包含classes
文件夾。
如果是這樣,這意味着您可能錯誤配置了您的eclipse項目。
我們遇到的一個案例是開發人員導入maven項目並“作為Web應用程序”運行項目。 他第一次這樣做時,Eclipse會問他webapp文件夾的位置。 如果你回答src/main/webapp
那么Eclipse會把它的類放在那里,之后它會被maven搞砸了。
要解決此問題,請從Eclipse中刪除項目並刪除src/main/webapp/WEB-INF/classes folder, then re-import the project
。
當Eclipse詢問webapp文件夾的位置時,它位於target/yourproject-yourversion
。
maven構建中的某些東西在compile
和package
階段之前弄亂了類文件。
首先注釋掉所有<plugins>
,然后一次添加1個,直到構建再次中斷。
確保你運行> mvn help:effective-pom
來檢查你的pom完全解析為父母pom之后的樣子。
(實驗)您甚至可以通過簡單地使用項目信息報告命令行來獲取依賴項報告,從而獲得構建本身以告訴您類是否錯誤。
> mvn clean org.apache.maven.plugins:maven-project-info-reports-plugin:2.6:dependencies
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.