2

Mavenized Eclipse プロジェクトに単純な webapp があります。私の pom.xml には、Google の appengine-maven-plugin をビルド プラグインに追加する行がいくつか含まれています。

実行するmvn appengine:devserverと、最終的にクラスをロードできなかったことを示すエラーが表示されます。

[INFO] WARNING: Error starting handlers [INFO] java.lang.ClassFormatError: Incompatible magic value 4022320623 in class file com/teamlazerbeez/http/di/StartupListener

その番号はEFBFBDEF16 進数表記であり、明らかにそうではないものでありCAFEBABE、バイト シーケンス Java クラス ファイルで始まる必要があります。私はこれこれだけを主題に見つけたので、クラスファイルの書き込みまたは読み取り中にエンコーディングが間違っていたと思います。

これが問題ですか?たとえば、UTF-8エンコーディングを使用してmavenにクラスの読み取り/書き込みを強制するにはどうすればよいですか? そして、良いエンコーディングとは何ですか?
私のJavaファイルはすべて同じ方法でエンコードされています.EclipseはISO-8859-1を示し、Notepad ++はANSIを示しています。

PS: 私は Windows マシンを使用しています。

4

4 に答える 4

4

Joakim Erdfeld回答が示唆するように、プラグインの 1 つがビルドをいじっています。原因はmaven-war-plugin v2.3 ですが、次の状況でのみ発生します。

Maven 化された Ecipse プロジェクト ( appengine-maven-plugin v1.7.5 が にリストされているpom.xml)で GAE 性質を有効にすると、次の条件が当てはまるmvn appengine:devserver 場合、実行が中断されます。

  • 「default output folder」(Eclipse プロジェクトの「Build Path」設定内) がsrc/main/webapp/WEB-INF/classes/(GAE Eclipse プラグインが機能するために必要) に設定されている
  • GAE プラグインはsrc/main/webapp/WEB-INF/lib/、これらの jar が既にクラスパスにあるにもかかわらず、GAE-jar を に配置することを決定しました。

結論として、maven-war-plugin は .class および .jar ファイルWEB-INF/を、結果の .war ファイルに不適切にコピーします。プロセスのどこかで、これらのファイルを誤ってエンコードします。

于 2013-03-07T15:56:52.813 に答える
3

フォルダーを確認してください。src/main/webapp/WEB-INFフォルダーが含まれていてはなりませんclasses

そうであれば、Eclipse プロジェクトの構成が間違っている可能性があります。

私たちが遭遇した 1 つのケースは、開発者が 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ます。

于 2013-12-11T12:09:42.137 に答える
1

Maven ビルドの何かが、フェーズの後compileと前にクラス ファイルをいじっています。package

すべてをコメントアウトすることから始めて<plugins>、ビルドが再び壊れるまで、一度に 1 つずつ追加し直します。

> mvn help:effective-pom親pomなどに完全に解決されたときに、pomがどのように見えるかを確認するために実行してください。

(実験的) 依存関係レポートに project-info-reports コマンドラインを使用するだけで、クラスが悪いかどうかをビルド自体に知らせることさえできるかもしれません。

> mvn clean org.apache.maven.plugins:maven-project-info-reports-plugin:2.6:dependencies
于 2013-03-06T14:48:19.640 に答える
1

無効なマジック番号 EFBFBDEF についても言及しているこの質問を見つけました。また、maven エンコーディングを適切に設定することをお勧めします。次のプロパティを使用します。

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

しかし、これは、maven ビルド プロセス中にエンコーディングの警告が表示された場合にのみ役立つと思います。

于 2013-03-06T15:27:44.563 に答える