Использование Java Compiler API без необходимости установки JDK - PullRequest
10 голосов
/ 09 апреля 2011

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

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

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

Ответы [ 4 ]

6 голосов
/ 09 апреля 2011

Вы можете использовать автономный Java-компилятор из Eclipse . Он не требует установки JDK, и это единственный файл JAR, который вы можете использовать в своем проекте. Это компилятор, который используется внутри самого Eclipse, но он также может быть интегрирован в другие программы. Текущую последнюю стабильную версию можно найти по адресу http://download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/index.php,. Ищите Look 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, которые используют ваши пользователи (обобщения, аннотации, перечисления, ...)

3 голосов
/ 09 апреля 2011

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

1 голос
/ 09 апреля 2011

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

0 голосов
/ 09 апреля 2011

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

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

...