[英]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_,或者更有可能。
我发现了两个临时解决方案(实际上实际上阻碍了注释处理器的使用):
这是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处共享它,以防它对某人有所帮助。
我们正在使用:
我们的问题:
说,我们有一个名为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的指针来补充上述答案:
解决方法包括
import some.package.*;
) some.package.Foo
而不使用导入
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.