2009-06-03 31 views
4

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

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

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

回答

5

当你运行javac您可以指定像这样的类装载器:

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

我不断收到ClassNotFOundException我不知道我做错了什么。 – 2012-09-04 13:53:14

4

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

0

为了扩展Michael的答案,如果你不能使用Java6,请看看太阳。包 - 它们一直都可用于java应用程序,并且一直有一个编译器,它不是标准的Java,所以你没有听说它,API可能会发生变化(如将它移动到javax.tools包)!

1

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

+0

很酷的黑客,虽然不适合我的问题 – 2009-06-05 15:06:20

+0

获得编译器特定黑客连接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

0

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

0

如果类都遵循相同的界面,你可以只提供在编译的时候..

如果没有,那么我没有根据数据库输出.java文件并编译它,看不到你在获得什么。

相关问题