Eclipse 3.5+ – 注释处理器:无法导入生成的类

我正在使用第三方注释处理器从我的项目中的带注释的类生成元数据代码(.java文件)。 我已经通过Eclipse(Properties – > Java Compiler – > Annotation Processing)成功配置了处理器,代码生成工作正常(代码自动创建和生成)。 此外,Eclipse成功自动完成生成的类及其字段,没有任何错误。 假设我有一个类“some.package.Foo”,生成的元数据类是“some.package.Foo_”。 在自动完成的帮助下,我可以在Eclipse编辑器中获得以下代码,没有任何错误:

import some.package.Foo_; ... public class Test { void test() { Foo_.someField = null; // try to access a field from the generated class Foo_ } } 

但是,一旦我实际构建项目(或者只是保存文件,因为Build自动启用),我得到的错误告诉“some.package.Foo_”无法解析。 似乎Eclipse正在同时生成和编译some.package.Foo_,或者更有可能。

我找到了两个临时解决方案(这实际上阻碍了注释处理器的使用):

  1. 在每次生成所生成的类之前,右键单击每个生成的文件,转到“属性”,然后取消选中“派生”标记。 之后,我对项目进行清理并且导入很好 – 没有更多的错误。 但是,如果我再次进行清理,则会再次显示错误,因为文件的生成会导致再次(自动)检查“派生”标记。 所以这真非常烦人且耗时。
  2. 我还取消选中所有这些文件中的“Derived”标记,这次我取消选中包含这些文件的源文件夹和包中的“Derived”标记。 然后我禁用注释处理器,然后进行清理。 没有更多的导入错误,即使我做了另一次清理,但使用注释处理器没有任何好处,因为如果我要更改一些会更新模型的东西,我需要重新打开注释处理器,并重复在生成这些文件的新版本之后,这个繁琐的程序将其关闭。

这是Eclipse中的错误吗? 如果是的话,是否有比上述两个更好的解决方法或快速解决方案? 如果没有,我应该尝试解决这个问题?

我也尝试重新排列构建路径上的库的顺序,但它没有帮助。

我假设您在最后一轮处理器中生成源。 这不是推荐的方式,并且完全导致您遇到的问题。 解释如下: http : //code.google.com/p/acris/wiki/CodeGenerationPlatform_Pitfall_Rounds

所以我的建议是在常规处理轮次中生成源,最后一轮应该仅用于通知处理结束或类似的事情。

希望这对你有所帮助。

我有一个类似的问题,我发现的唯一的事情是它是特定的导入不起作用,但类本身的引用确实有效。 我使用的解决方法是在需要生成类的所有情况下使用FQCN(除非生成的类在同一个包中,因此显然不需要导入)。

所以要使用你的例子,我会这样做:

 public class Test { void test() { some.package.Foo_.someField = null; // try to access a field from the generated class Foo_ } } 

我唯一的猜测是eclipse编译器在进行注释处理之前正在处理导入,这在eclipse中必定是一个bug。

我知道这个问题已经超过一年了,所以我有兴趣知道你是否找到了其他方法来解决它。

我们遇到了类似的问题,显然只是解决了它,所以考虑在SO上分享它,以防它帮助某人。

我们正在使用:

  • Eclipse Indigo(Build id:20120216-1857)
  • m2e连接器为maven
  • openJPA用于静态元模型类生成

我们的问题:

比如,我们有一个名为com.abc.xyz的包和一个名为OurEntity的实体类。 当我们构建项目(JPA,EJB,EAR等以及开头的mvn clean)时,将生成元模型类。 并在PUjar中适当包装。 但是当我们尝试导入生成的元模型类com.abc.xyz.OurEntity_时,Eclipse无法解析它。 OP显然已经超越了这一点:-)。 Maven构建失败,说它无法解决该类。 谷歌的帮助不大,除了一些bug报告,例如这个: https : //bugs.eclipse.org/bugs/show_bug.cgi?id = 350378
那个错误报告说导入整个包而不是单个类有帮助。 所以,尝试过,但没有任何好处。 它还说(David Heitzman也是如此)使用完全限定的类名为他们工作。 那也行不通。

解决方案:

为需要使用元模型类的项目的Eclipse构建路径添加了PU jar 。 所有的红色下划线都突然消失了(不足为奇)。 但令人担心的是,同一只耳朵可能会有两个PU。 但是maven会自动处理这个问题。

由于这个相当古老的问题得到了一些关注而没有指出OP特别要求的非常可能的日食错误,我想用指向日食bug跟踪器的指针来补充上述答案:

无法使用引用常量的参数解析生成的类IF处理注释的导入

解决方法包括

  1. 执行定义生成的类的包的通配符导入(即import some.package.*;
  2. 使用生成的类的完全限定名称,即在代码中引用some.package.Foo而不使用导入
  3. 切换到更新的Eclipse。 这个特定的eclipse错误是用Eclipse 4.4版(又名Luna)解决的。