3

是否可以为 javac (或一些替代的 java 编译器)指定自定义类加载器?

我喜欢这样的壮举,因为它允许我编译使用只有我的特殊类加载器才能找到的类的类。

对于好奇的人:我会编写一个连接到数据库并根据它找到的表创建类的类加载器。

4

6 回答 6

5

当你运行 javac 时,你可以像这样指定类加载器:

javac -J-Djava.system.class.loader=org.awesome.classloader sourcefile.java
于 2009-06-03T19:43:40.640 回答
4

可以初始化一个自定义类加载器,然后在javax.tools中调用新的 Java 6 编译器 API 时使用它。

于 2009-06-03T17:31:08.877 回答
1

我知道直接插入 javac(在命令行上运行)的唯一两种方法是通过注解处理器或通过特定于编译器的 hack

于 2009-06-03T17:43:02.197 回答
0

只是为了扩展迈克尔的答案,如果你不能使用 Java6,看看太阳。包——它们一直可用于 java 应用程序并且总是有一个编译器,它不是标准的 Java,所以你很少听到它,API 可能会发生变化(比如将它移动到 javax.tools包裹!)

于 2009-06-03T17:36:14.657 回答
0

看看ClassLoader.defineClass。我自己用它来将插件加载到我创建的程序中,在该程序中我将文件的字节加载到一个新类中。

于 2009-06-03T19:02:11.880 回答
0

如果这些类都符合相同的接口,您可以在编译时提供它..

如果不是,那么我看不到您通过不输出基于数据库的 .java 文件并对其进行编译来获得什么。

于 2009-06-03T21:45:08.087 回答