簡體   English   中英

GAE ClassFormatError:不兼容的魔法值4022320623 EFBFBDEF

[英]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以下條件適用:

  • 'default output folder'(在Eclipse項目的'Build Path'設置中)設置為src/main/webapp/WEB-INF/classes/ (GAE Eclipse插件工作所需)
  • GAE插件決定將GAE-jars放在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構建中的某些東西在compilepackage階段之前弄亂了類文件。

首先注釋掉所有<plugins> ,然后一次添加1個,直到構建再次中斷。

確保你運行> mvn help:effective-pom來檢查你的pom完全解析為父母pom之后的樣子。

(實驗)您甚至可以通過簡單地使用項目信息報告命令行來獲取依賴項報告,從而獲得構建本身以告訴您類是否錯誤。

> mvn clean org.apache.maven.plugins:maven-project-info-reports-plugin:2.6:dependencies

我發現這個問題還提到了無效的幻數EFBFBDEF。 它似乎也建議您正確設置maven編碼。 使用以下屬性:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

但我認為這只有在maven構建過程中收到編碼警告時才有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM