是否可以为javac(或其他替代java编译器)指定自定义类加载器?在编译时使用自定义类加载器
我很喜欢这样的壮举,因为它可以让我编译使用只有我的特殊类加载器才能找到的类的类。
对于好奇的人:我会写一个classloder连接到数据库,并根据它找到的表创建类。
是否可以为javac(或其他替代java编译器)指定自定义类加载器?在编译时使用自定义类加载器
我很喜欢这样的壮举,因为它可以让我编译使用只有我的特殊类加载器才能找到的类的类。
对于好奇的人:我会写一个classloder连接到数据库,并根据它找到的表创建类。
当你运行javac您可以指定像这样的类装载器:
javac -J-Djava.system.class.loader=org.awesome.classloader sourcefile.java
可能会初始化自定义类加载器,然后在调用javax.tools中的新Java 6编译器API时使用它。
为了扩展Michael的答案,如果你不能使用Java6,请看看太阳。包 - 它们一直都可用于java应用程序,并且一直有一个编译器,它不是标准的Java,所以你没有听说它,API可能会发生变化(如将它移动到javax.tools包)!
我知道直接插入javac(在命令行上运行)的唯一两种方式是通过annotation processor或通过compiler-specific hack。
很酷的黑客,虽然不适合我的问题 – 2009-06-05 15:06:20
获得编译器特定黑客连接404,这里是web.archive.org链接:http://web.archive.org/web/20140819224858/http:/ /www.iam.unibe.ch/~akuhn/blog/2008/roman-numerals-in-your-java/ – 2016-01-25 00:58:05
看一看ClassLoader.defineClass。我自己使用它来将插件加载到我创建的程序中,其中我将文件的字节加载到新类中。
如果类都遵循相同的界面,你可以只提供在编译的时候..
如果没有,那么我没有根据数据库输出.java文件并编译它,看不到你在获得什么。
我不断收到ClassNotFOundException我不知道我做错了什么。 – 2012-09-04 13:53:14