在编译时使用自定义类加载器

时间:2009-06-03 17:18:45

标签: java classloader

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

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

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

6 个答案:

答案 0 :(得分:5)

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

javac -J-Djava.system.class.loader=org.awesome.classloader sourcefile.java

答案 1 :(得分:4)

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

答案 2 :(得分:1)

我知道直接插入javac(在命令行上运行)的唯一两种方法是通过annotation processorcompiler-specific hack

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

如果所有类都符合相同的接口,则可以在编译时提供该接口..

如果没有,那么我没有看到你通过不输出基于数据库的.java文件并编译它而获得了什么。