在Eclipse中自定义编译时类加载?

时间:2013-02-14 04:07:42

标签: java eclipse compiler-construction classloader

有没有办法在编译Java源文件时挂钩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()返回,后者又通过调用bar.Bar来访问getBar() 1}}方法)。

我希望能够拦截这些“类请求”中的每一个,以便我可以提供自定义逻辑来获取有问题的类(可能它存在于数据库中,也许它是由某个服务器在某处提供的,等等) )。

另外,如果没有尝试编译Eclipse项目中的任何源文件,直到用户明确打开它们,我都会喜欢它。因此,在上面的示例中,在用户实际打开源文件bar.Bar之前,不会发出3个类请求(baz.Bazqux.Quxfoo/Foo.java)。理想情况下,项目中的源文件列表不必是文件系统上的实际文件(可能它们也存在于数据库中等),只有在用户打开/加载源文件时才会进行编译尝试。

我意识到,如果可能的话,这有一些缺点。例如,如果我编辑源文件foo/Foo.java以使类“包私有”,这将默默地破坏依赖于foo.Foo的任何类,直到完成项目的“完整”编译。就目前而言,这对我的目的来说很好(以后我可以做些事情来解决这个问题)。

有任何想法/建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

可能不会,这将属于JDT的Java构建路径部分,我不认为它具有该级别的自定义。似乎没有为此记录的扩展点。要获得明确的答案,您需要查看源代码。您可以添加此功能,这意味着您需要使用JDT的备用版本,这可能很难或不可能。