繁体   English   中英

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

[英]Eclipse 3.5+ - Annotation processor: Generated classes cannot be imported

我正在使用第三方注释处理器从项目中的注释类生成元数据代码(.java文件)。 我已经通过Eclipse(属性-> Java编译器->注释处理)成功配置了处理器,并且代码生成正常(代码是自动创建和生成的)。 而且,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_
  }
}

但是,一旦我实际构建项目(或者由于启用了自动构建功能而只是保存文件),就会收到错误消息,提示无法解决“ some.package.Foo_”。 看来Eclipse正在同时生成或编译some.package.Foo_,或者更有可能。

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

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

这是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编译器在进行批注处理之前正在处理导入,imho必须是eclipse中的错误。

我知道这个问题已有一年多的历史了,所以我很想知道您是否找到其他解决方法。

我们遇到了一个类似的问题,显然只是解决了这个问题,因此考虑在SO处共享它,以防它对某人有所帮助。

我们正在使用:

  • Eclipse Indigo(版本ID:20120216-1857)
  • Maven的m2e连接器
  • openJPA用于生成静态元模型类

我们的问题:

说,我们有一个名为com.abc.xyz的程序包,其中有一个名为OurEntity的实体类。 当我们构建项目(JPA,EJB,EAR等),并在开始时使用mvn clean进行构建时,将生成元模型类。 并适当包装在PU罐中。 但是,当我们尝试导入生成的元模型类com.abc.xyz.OurEntity_时,Eclipse无法解决它。 OP显然已经超过了这一点:-)。 Maven构建失败,表示无法解析该类。 除了一些错误报告(例如以下报告)外,Google的帮助不多: https : //bugs.eclipse.org/bugs/show_bug.cgi?id=350378
该错误报告说,导入整个软件包而不是单个类很有帮助。 因此,尝试了一下,但没有任何好处。 它还说(David Heitzman也是如此),使用完全限定的类名对他们有效。 那也不起作用。

解决方案:

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

由于这个相当老的问题得到了关注,而没有指出OP专门要求的非常可能的Eclipse错误,因此我想用指向Eclipse Bug Tracker的指针来补充上述答案:

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

解决方法包括

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM