0

プロジェクトを Java 6 から Java 7 にアップグレードしていて、この問題に遭遇しました。このプロジェクトは、春と JPA 2.0 を使用しています。StaticMetaModel アノテーションを持つクラスがいくつかあります。Java 6 でコンパイルすると問題はありませんが、Java 7 でコンパイルすると次のエラーが表示されます。

...\trunk\target\generated-sources\annotations\..\[SOME_NAME]Entity_.java:[8,16] error: duplicate class: [SOME_NAME]Entity_

基本的に、Java 7 は、これらのクラスを generated-sources\annotations フォルダーにコピーするある種の注釈プロセッサを実行してから、このパスに対してコンパイルしようとしています。これらのクラスは別の場所に存在し、その別の場所からこの新しい場所にコピーされたため、これは機能しません。明らかにこれが「重複クラスエラー」が発生する理由ですが、これを修正する方法がわかりません。

Java 6 はこの問題を無視しているようです。

これは、pom ファイルの一部であり、これに関係があると思われます。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
    </configuration>
</plugin>

以下はこのプラグインでコメントアウトされていましたが、追加しても認識できる効果はありませんでした。

<compilerArguments>
    <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
</compilerArguments>
4

1 に答える 1

0

質問を投稿すると、必ずすぐに解決策が見つかります。うまくいけば、これはこれに遭遇する可能性のある他の誰かを助けるでしょう.

どうやらこのコードは古く、何らかの理由で @StaticMetaModel クラスが手動で生成され、プロジェクトの一部として src フォルダー パスに含まれています。たぶん、これは Java 6 のバグで、下のソースを認識できませんでした../generated-code/annotations。src フォルダー パスのコピーを削除するだけで、すべて正常に動作しました。

経験豊富な他の誰かがコメントして、JPA/hibernate で注釈プロセッサがどのように機能するかを正確に説明できるかもしれませんが、基本的には @Entity でクラスをチェックしているようで、@StaticMetaModel 注釈でそれらの .java バージョンを作成してから配置します。../generated-code/annotationsフォルダー内。Intellij でコンパイルを実行しようとすると、最初は失敗しますが、maven でコンパイル ステージを実行してから Intellij でコンパイルすると、期待どおりにすべてがうまくいきます。

于 2014-03-19T20:35:30.753 に答える