Java компилятор во время выполнения - PullRequest
7 голосов
/ 21 августа 2010

В моем текущем проекте мне нужно скомпилировать код Java во время выполнения (в фоновом режиме для обработки ввода от пользователя).Это прекрасно работает с tools.jar в classpath.Однако не все пользователи моей программы имеют JDK, установленный в их системе.Некоторые из них имеют только JRE, и в этом случае во время выполнения не будет доступен компилятор Java.Я могу решить эту проблему, включив tools.jar от Sun как часть моего инструмента.

Но tools.jar очень большой (> 12 МБ). Проблема в том, что мне нужно включить большой файл jar, хотя меня интересует лишь небольшая часть функций, предоставляемых этим jar.можно разбить файл tools.jar, чтобы у меня было небольшое подмножество классов, необходимых только для компиляции кода Java?

Это незаконно?

Большое спасибо.

Ответы [ 6 ]

3 голосов
/ 21 августа 2010

Компилятор eclise занимает всего 1,6 МБ и должен работать без Eclipse. Вы можете скачать его здесь . Также похоже, что он реализует API JavaCompiler.

Он лицензирован по публичной лицензии eclipse, поэтому включение его в ваше приложение не должно быть проблемой.

1 голос
/ 21 августа 2010

Вероятно, лучший вопрос: почему?

Если вам нужно выполнить динамические математические вычисления, рассмотрите JEval.Если вам нужны люди для написания простых плагинов, рассмотрите некоторые динамические языки, такие как Javascript или Python, которые упоминал @Jay.

Для чего-либо еще вы должны потребовать, чтобы ваш пользователь загрузил JDK, поскольку это то, что требуется для написания Java.Было бы трудно найти вескую причину, по которой вы хотели бы встроить компилятор в вашу программу

1 голос
/ 21 августа 2010

Вместо компиляции кода во время выполнения я переписал бы код на языке сценариев и использовал бы среду сценариев . Тогда нет необходимости в JDK, и нет никаких юридических проблем, чтобы обойти. Тогда у вас также есть много вариантов выбора языков, таких как Beanshell , JavaScript или jython .

1 голос
/ 21 августа 2010

Я не думаю, что было бы возможно разбить tools.jar, а также не должно быть разрешено включать tools.jar.

Чек http://forums.sun.com/thread.jspa?threadID=5161541

Вы можете найти сторонний Java-компилятор и изменить свой код, чтобы использовать его.

  • GCJ, часть gcc, которая составляет C, Фортран, Паскаль и другое программирование языки помимо Java. Это также может генерировать собственный код, используя серверная часть gcc. http://en.wikipedia.org/wiki/GNU_Compiler_for_Java

  • ECJ, Eclipse Compiler для Java, является инкрементным с открытым исходным кодом компилятор, используемый Eclipse JDT.

  • http://en.wikipedia.org/wiki/Jikes (Этот не поддерживает Java 6 и ограниченная поддержка Java5)

Но я не знаю точного кода для компиляции с их использованием.

0 голосов
/ 21 августа 2010

Возможно, вы захотите взглянуть на библиотеку Javassist, которая содержит компилятор сниппета, подходящий для создания метода для вычисления и последующего использования этого метода.

Какой из них наиболее подходит, зависит от ваших реальных потребностей - особенно от того, как часто вам нужно это делать.

0 голосов
/ 21 августа 2010

Вы хотите что-то вроде java-скриптинга, например, BeanShell?Это помогает запускать код Java без компиляции.

...