簡體   English   中英

是否可以在不使用外部庫的情況下用Java動態編譯類?

[英]Is it possible to compile a class on the fly in Java without using external libraries?

在我看來,Java編譯器API允許在運行時編譯一個類,並將其輸出(.class文件)寫入文件系統。 但是,不支持內存中編譯。 這個對嗎 ? 還是可以使用此API編譯內存中的類(從String)並在之后實例化此類?

(我知道我可以將類編譯到文件系統,然后再使用自定義類加載器將其加載,但是我想知道是否可以在不經過文件系統的情況下將其編譯到內存中)。

僅使用J2SE進行內存編譯時,還有另一種機制可以做到這一點嗎? BeanShell (可以執行我想做的我的庫)在其網頁中提到,它可能會在“將來的某個時候”包含在J2SE中,但是,其JSR的狀態是“休眠”(意味着什么) 。

更新:

理想情況下,我想知道這是否只能用J2SE來完成(或者是否有對J2SE的預期增強,例如可以在Java 8中實現)。 但是,也感謝有關如何要求安裝JDK的提示(感謝Evgeniy)。

如果您有JDK,則可能是Java編譯器位於JDK隨附的tools.jar中。 參見http://docs.oracle.com/javase/7/docs/api/javax/tools/package-summary.html

不支持Java Compiler API ..內存中編譯。 這個對嗎?

。STBC使用JavaCompiler來做到這一點。

..然后實例化此類?

STBC並沒有嘗試加載/運行該類,但是我認為應該可以。 我想象它可能需要一個自定義的“內存中”類加載器。

..無論是否安裝JDK,JavaCompiler API都可以獨立執行此操作?

從頁面..

系統要求

STBC可以在任何Java 1.6+版本的計算機上運行 插入 * JDK(AKA SDK)。

* STBC使用的API僅僅是tools.jar中編譯器的公共接口, 僅與JDK一起分發(盡管JDK的“公共JRE”似乎也獲得了tools.jar )。 ..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM