是否可以为javac(或其他替代java编译器)指定自定义类加载器?
我喜欢这样的壮举,因为它允许我编译使用只能由我的特殊类加载器找到的类的类。
对于好奇的人:我会写一个连接到数据库的类,并根据它找到的表创建类。
答案 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 processor或compiler-specific hack。
答案 3 :(得分:0)
只是为了扩展迈克尔的答案,如果你不能使用Java6,那就看看太阳。软件包 - 它们一直可供java应用程序使用,并且总是有一个编译器,它只是不是标准的Java,所以你没有听到太多,API可能会发生变化(比如将它移到javax.tools)包!)
答案 4 :(得分:0)
看看ClassLoader.defineClass。我自己用它来将插件加载到我创建的程序中,其中我将文件的字节加载到一个新类中。
答案 5 :(得分:0)
如果所有类都符合相同的接口,则可以在编译时提供该接口..
如果没有,那么我没有看到你通过不输出基于数据库的.java文件并编译它而获得了什么。