为啥 Eclipse 不编译 APT 生成的类?
Posted
技术标签:
【中文标题】为啥 Eclipse 不编译 APT 生成的类?【英文标题】:Why aren't APT generated classes being compiled by Eclipse?为什么 Eclipse 不编译 APT 生成的类? 【发布时间】:2010-06-14 16:03:20 【问题描述】:在我的 Eclipse 项目中,我正在使用第三方注释处理器,确切地说是Hibernate Metamodel Generator。注释处理器按预期工作并生成规范指定的 .java 文件。这些文件生成到 Eclipse 项目的目录中的“gen”文件夹下。在项目属性中,这是正确的,因为存在两个源文件夹 - “src”和“gen”。但是,当由于某种原因构建项目时,“gen”下的所有 [生成] 源都没有被编译(检查“bin”目录,我只看到“src”目录中的 .class 文件)。有谁知道为什么会这样?
【问题讨论】:
【参考方案1】:我不久前想通了,我想我会回来解释发生了什么。当编译器运行时,它会编译现有的源(我写的),然后从现有的源文件生成源文件,但它不会编译这些生成的类。我最终把它变成了一个 Ant 项目(根据设置 instructions)。所以,基本上我有两个任务:第一个是生成新的源文件(使用 -proc:only
选项运行 javac 会导致在不编译源的情况下进行注释处理),第二个是实际编译所有源(生成的和现有的)。
【讨论】:
我在 Eclipse 3.5 上遇到了同样的问题,升级到 3.6 解决了它。【参考方案2】:您必须刷新 Eclipse 中的“gen”文件夹(例如,从 Package Explorer 中),以便 Eclipse 看到新生成的文件并编译它们。你这样做吗?
【讨论】:
是的,我尝试的第一件事。奇怪的是 Eclipse 说当我尝试使用它们时它无法识别这些文件(红色波浪线和问题视图下的消息),但是当我摆脱使用它们的代码并尝试使用自动完成时将生成的类显示为选项。我也尝试清理然后重建项目。我觉得这些 java 文件是在错误的时间生成的,因为首先 src 下的所有内容都编译到 bin 中,然后在 gen 下生成 .java 文件。不确定我是否可以很容易地验证这一点以上是关于为啥 Eclipse 不编译 APT 生成的类?的主要内容,如果未能解决你的问题,请参考以下文章
eclipse 项目中的java文件没有在WEB-INF目录下的classes中 生成相对应的编译后的类