我正在将一个项目从使用java 6升级到java 7,并遇到了这个问题。这个项目使用spring和JPA2.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\ annotation文件夹中,然后尝试针对这个路径进行编译。这将永远无法工作,因为这些类存在于其他地方,并且被从另一个位置复制到这个新位置。显然这就是我得到“重复类错误”的原因,但我不知道如何解决这个问题。
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>发布于 2014-03-19 20:35:30
如果我发了一个问题,然后总是在那里找到解决办法,我就不会失败。希望这能帮助其他可能遇到这种情况的人。
显然,这段代码是旧的,出于某种原因,@StaticMetaModel类是手动生成的,并作为项目的一部分包含在src文件夹路径中。也许这是java 6的一个bug,使得它无法识别../generated-code/annotations下的源代码。我只需删除src文件夹路径中的副本,一切都正常。
也许有更多经验的其他人能够准确地评论和描述注释处理器在JPA/hibernate中的工作方式,但基本上它似乎是在检查带有@Entity的类,然后使用@StaticMetaModel注释创建它们的.java版本,然后将它们放在../generated-code/annotations文件夹中。如果我尝试在Intellij中运行编译,那么它一开始就会失败,但是如果我在maven中运行编译阶段,然后在Intellij中编译,一切都很好。
https://stackoverflow.com/questions/22516895
复制相似问题