我正在将项目从使用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>
答案 0 :(得分:0)
如果我在某个地方发布问题,我会立即找到解决方案。希望这将有助于其他可能遇到此问题的人。
显然这段代码很旧,出于某种原因,@ StaticMetaModel类是手动生成的,并作为项目的一部分包含在src文件夹路径中。也许这是java 6的一个错误,使得它无法识别../generated-code/annotations
下的来源。我只是删除了我们的src文件夹路径中的副本,一切正常。
也许其他有更多经验的人可以评论并准确描述注释处理器在JPA / hibernate中的工作方式,但基本上它似乎是用@Entity检查类,然后使用@StaticMetaModel注释创建它们的.java版本然后将它们放在../generated-code/annotations
文件夹中。如果我尝试在Intellij中运行编译,它将首先失败,但是如果我在maven中运行编译阶段然后我在Intellij中编译,一切都按预期正常。