MetaModel注释编译错误

时间:2014-03-19 20:03:38

标签: hibernate jpa compilation java-7 metamodel

我正在将项目从使用java 6升级到java 7并遇到了这个问题。该项目使用spring和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>

1 个答案:

答案 0 :(得分:0)

如果我在某个地方发布问题,我会立即找到解决方案。希望这将有助于其他可能遇到此问题的人。

显然这段代码很旧,出于某种原因,@ StaticMetaModel类是手动生成的,并作为项目的一部分包含在src文件夹路径中。也许这是java 6的一个错误,使得它无法识别../generated-code/annotations下的来源。我只是删除了我们的src文件夹路径中的副本,一切正常。

也许其他有更多经验的人可以评论并准确描述注释处理器在JPA / hibernate中的工作方式,但基本上它似乎是用@Entity检查类,然后使用@StaticMetaModel注释创建它们的.java版本然后将它们放在../generated-code/annotations文件夹中。如果我尝试在Intellij中运行编译,它将首先失败,但是如果我在maven中运行编译阶段然后我在Intellij中编译,一切都按预期正常。