Java-компилятор во время выполнения

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

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

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

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

    7
    задан Dipmedeep 21 August 2010 в 11:24
    поделиться

    6 ответов

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

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

    3
    ответ дан 7 December 2019 в 09:55
    поделиться

    Я не думаю, что возможно разбить 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 для Java, является инкрементальным с открытым исходным кодом компилятор, используемый Eclipse JDT.

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

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

    1
    ответ дан 7 December 2019 в 09:55
    поделиться

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

    1
    ответ дан 7 December 2019 в 09:55
    поделиться

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

    0
    ответ дан 7 December 2019 в 09:55
    поделиться

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

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

    0
    ответ дан 7 December 2019 в 09:55
    поделиться

    Вероятно, лучше спросить "зачем?"

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

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

    1
    ответ дан 7 December 2019 в 09:55
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: