В моем текущем проекте мне нужно скомпилировать код Java во время выполнения (в фоновом режиме для обработки ввода от пользователя). Это прекрасно работает с tools.jar в classpath. Однако не все пользователи моей программы имеют установленный JDK в своей системе. Некоторые из них имеют только JRE, и в этом случае во время выполнения не будет доступен компилятор Java. Я могу решить эту проблему, включив tools.jar от Sun как часть моего инструмента.
Но tools.jar очень большой (> 12 МБ). Проблема в том, что мне нужно включить большой файл jar, файл tools.jar, чтобы у меня был небольшое подмножество классов, которые требуется для компиляции кода Java только?
Это незаконно?
Большое спасибо.
Компилятор eclipse весит всего 1,6 МБ и должен работать без eclipse. Скачать его можно здесь. Также похоже, что он реализует API JavaCompiler.
Он распространяется под публичной лицензией eclipse, поэтому его включение в ваше собственное приложение не должно вызвать проблем.
Я не думаю, что возможно разбить 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)
Но я не знаю точного кода для компиляции с их помощью.
Вместо компиляции кода во время выполнения я бы переписал код на языке сценариев и использовал среду сценариев . Тогда нет необходимости в jdk и нет юридических проблем, которые можно было бы обойти. Кроме того, у вас также есть множество вариантов использования языков, например Beanshell , JavaScript или jython .
вы хотите что-то вроде сценариев Java, например BeanShell? Это помогает запускать Java-код без их компиляции.
Возможно, вы захотите взглянуть на библиотеку Javassist, которая содержит компилятор фрагментов кода, подходящий для создания метода вычисления и последующего использования этого метода.
Какой из них наиболее подходит, зависит от ваших реальных потребностей - особенно от того, как часто вам нужно это делать.
Вероятно, лучше спросить "зачем?"
Если вам нужно делать динамические математические вычисления, то рассмотрите JEval. Если вам нужно, чтобы люди писали простые плагины, рассмотрите некоторые из динамических языков, таких как Javascript или Python, которые упомянул @Jay.
Для всего остального вы должны потребовать, чтобы ваш пользователь загрузил JDK, поскольку именно этого требует написание Java. Трудно найти вескую причину, по которой вы захотите встроить компилятор в свою программу