2009-06-03 73 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文件並編譯它,看不到你在獲得什麼。