Использование Java Compiler API без необходимости установки JDK

Привет всем Я пишу какое-то программное обеспечение, которое позволит пользователям создавать свои собственные классы Java для конкретного использования в моем программном пакете. Очевидно, что мое программное обеспечение должно будет иметь возможность вызвать компилятор Java для компиляции классов, созданных пользователем, для использования в моей программе. Однако я не хочу, чтобы пользователи загружали и устанавливали весь JDK, чтобы они могли иметь доступ к javac-компилятору Java. Я понимаю, что в Jave 6 есть новый Java Compiler API, но даже тогда пользователи с JRE, а не JDK получат нулевой объект, когда они попытаются создать экземпляр инструмента компиляции Java.

Итак, каков наилучший способ включить мою программу для компиляции классов Java, требуя от конечного пользователя просто установить JRE на своих машинах? Если это невозможно, каков минимальный набор библиотек /jar файлов, которые мне нужно установить на пользовательскую машину?

Я полагаю, что другой возможностью может быть использование JWS (javaws) для запуска приложения через Интернет. В этом случае, возможно ли, чтобы мое программное обеспечение не требовало JDK (в основном, tools.jar, я думаю)? Должен ли я каким-то образом связать tools.jar с моим программным обеспечением?

Ответ 1

Вы можете использовать автономный Java-компилятор из Eclipse. Он не требует установки JDK, и это один JAR файл, который вы можете использовать в своем проекте. Это компилятор, который используется внутри самого Eclipse, но он также может быть интегрирован в другие программы. Текущую последнюю стабильную версию можно найти в http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/index.php, ищите компонент JDT Core Batch Compiler. Документацию можно найти на http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm

Вы также можете использовать Janino, который может скомпилировать также меньшие единицы, чем полные классы Java: блоки, выражения. Это не полный компилятор, но он не поддерживает все функции языка Java, которые используют ваши пользователи (generics, annotations, enums,...)

Ответ 2

Чтобы использовать компилятор java, вам нужно включить tools.jar в ваше приложение (например, оно должно быть доступно загрузчику классов, который хочет загрузить компилятор - проще всего загрузчиком класса System).

Ответ 3

Возможно, http://asm.ow2.org/ это будет полезно? Чтобы генерировать байт-код на лету?

Ответ 4

Похоже, что лучшим решением будет использование некоторых языков сценариев, которые могут работать в JVM без необходимости компиляции.

Возможно, вам будет полезен Java Scripting API. Я уверен, что есть и другие варианты.