我正在使用第三方注释处理器从项目中带注释的类生成元数据代码(.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_,或者更有可能。
我找到了两个临时解决方案(首先实际上阻碍了注释处理器的使用):
这是Eclipse中的错误吗?如果是,是否有比上述两个更好的解决方法或快速解决方案?如果没有,我应该尝试解决这个问题?
我也尝试在构建路径上重新排列库的顺序,但它没有帮助。
答案 0 :(得分:2)
我假设您在最后一轮处理器中生成了源代码。这不是推荐的方式,并且完全导致您遇到的问题。 解释如下:http://code.google.com/p/acris/wiki/CodeGenerationPlatform_Pitfall_Rounds
所以我的建议是在常规处理轮次中生成源,最后一轮应该仅用于处理结束或类似的通知。
希望这可以帮到你。
答案 1 :(得分:2)
我遇到了类似的问题,我发现唯一的问题就是 imports 特别是不起作用,但是类本身的引用确实有效。我使用的解决方法是在需要生成类的所有情况下使用FQCN(除非生成的类在同一个包中,因此显然不需要导入)。
所以要使用你的例子,我会这样做:
public class Test {
void test() {
some.package.Foo_.someField = null; // try to access a field from the generated class Foo_
}
}
我唯一的猜测就是eclipse编译器在进行注释处理之前正在处理导入,这在eclipse中一定是个错误。
我知道这个问题已经超过一年了,所以我很想知道你是否找到了其他方法来解决它。
答案 2 :(得分:1)
我们遇到了类似的问题,显然刚刚解决了它,所以想到在SO上分享它,以防它有助于某人。
我们正在使用:
我们的问题:
说,我们有一个名为com.abc.xyz的包和一个名为OurEntity的实体类。当我们构建项目(JPA,EJB,EAR等以及开头的mvn clean)时,会生成元模型类。并在PU罐中适当包装。但是当我们尝试导入生成的元模型类com.abc.xyz.OurEntity_时,Eclipse无法解析它。 OP显然已经超越了这一点:-)。 Maven构建失败,说它无法解决该类。谷歌提供的帮助不大,除了一些错误报告,例如:https://bugs.eclipse.org/bugs/show_bug.cgi?id=350378
那个错误报告说导入整个包而不是单个类有帮助。所以,尝试过,但没有任何好处。它还说(David Heitzman也是如此)使用完全限定的类名为他们工作。这也不起作用。
解决方案:
为需要使用元模型类的项目添加了PU jar到Eclipse构建路径。所有的红色下划线都突然消失了(不足为奇)。但令人担心的是,同一只耳朵可能会有两个PU。但是maven会自动处理这个问题。
答案 3 :(得分:0)
由于这个相当古老的问题得到了一些关注而没有指出OP特别要求的非常可能的日食错误,我想用指向日食bug追踪器的指针来补充上述答案:
解决方法包括
import some.package.*;
)some.package.Foo
而不使用导入