0

我正在将一个项目从使用 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 正在运行某种注释处理器,将这些类复制到 generate-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 回答