有没有办法在编译 Java 源文件时 Hook Eclipse 编译器来指定自定义类读取/解析/加载逻辑?我不确定正确的术语是什么,但本质上相当于运行时发生的“类加载”的编译时。
例如,假设我有 Java 源代码:
package foo;
import bar.Bar;
public final class Foo {
// getQux() returns type: qux.Qux
private final Bar bar = baz.Baz.getQux().getBar();
[...]
}
编译器应请求在编译源文件foo/Foo.java
时读取3个类:
bar.Bar
- 它被指定为导入。baz.Baz
- 以完全限定形式使用 (... = baz.Baz.getQux()...
)。qux.Qux
- 它是一个“间接”依赖项(它是通过调用baz.Baz.getQux()
返回的,而该调用又用于通过调用getBar()
方法来访问bar.Bar
)。
我希望能够拦截每个“类请求”,以便我可以提供自定义逻辑来获取有问题的类(也许它位于数据库中,也许它由某个服务器提供,等等)。
此外,我希望在用户明确打开 Eclipse 项目中的任何源文件之前不尝试编译它们。因此,在上面的示例中,直到用户实际上打开了源文件foo/Foo.java
。理想情况下,项目中的源文件列表不必是文件系统上的实际文件(也许它们也存在于数据库中等),并且仅当用户打开/加载源文件时才进行编译尝试。
我意识到,如果可能的话,这有一些缺点。例如,如果我编辑源文件 foo/Foo.java 以使该类成为“包私有(private)”,这将默默地破坏任何依赖于 foo.Foo 的类,直到项目的“完整”编译已完成。目前,这对于我的目的来说很好(稍后我可以做一些事情来解决这个问题)。
有什么想法/建议吗?
谢谢!
最佳答案
可能不会,这属于 JDT 的 Java 构建路径部分,我认为它没有那种级别的定制。似乎没有对此有记录的扩展点。要获得明确的答案,您需要查看来源。您可能可以添加此功能,但这意味着您需要使用 JDT 的替代版本,这可能很困难或不可能。
关于java - Eclipse 中的自定义编译时类加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14867657/