java - Eclipse 中的自定义编译时类加载?

标签 java eclipse compiler-construction classloader

有没有办法在编译 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/

相关文章:

c++ - 关于 C++ 编译器的几个问题 : GCC, MSVC、Clang、Comeau 等

c - 有没有免费软件可以替代 CCS C 编译器?

java - 滚动 java TextArea 的问题

java - 您可以使用 RandomAccessFile 访问远程 FTP 服务器上的文件吗?

java - 在 Eclipse Android 项目中运行带有 main(String[] args) 的 Java 类作为 Java 应用程序导致 "Invalid layout of java.lang.String at value"

java - 尽管没有在 Tomcat 的 webapps 文件夹中放置任何数据,Eclipse 如何能够使用 Tomcat 显示 Java EE webapp?

parsing - 有没有办法在不使用语法引导翻译的情况下编写编译器前端?

java - 运行sonarrunner时找不到类错误

带有 Id 的 Java Android ArrayList

c++ - eclipse变量悬停中的Debian XFCE黑色背景