2016-10-23 11 views
1

У меня есть вопрос, от которого я довольно смущен.java - Компилировать код на стороне клиента без JDK

Я знать о различиях между JR банках Северо-З untime Е nviroment и J AVA D evelopement К его.

Я пишу программу, которая использует метод ToolProvider.getSystemJavaCompiler() для компиляции кода Java из кода.

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

Заранее благодарен!

+0

Запустите os на виртуальной машине только с JRE и попробуйте запустить скомпилированную программу – gkiko

+1

Если вам известно о разнице, то почему вы думаете, что JRE будет недостаточно для пользователя? –

+0

Почему, по-вашему, вы можете скомпилировать код на компьютере пользователя без JDK? – SLaks

ответ

0

Вам необходимо скомпилировать его в своей системе и распространить файл класса соответствующего исходного файла java кому угодно.

Этот классный файл не требует JDK, но JRE должен быть установлен в этой системе для запуска файла класса.

+1

Не для 'getSystemJavaCompiler'. Прочтите вопрос. – SLaks

+0

Посмотрите на редактирование ... – NonameSL

+0

Да, раньше было совсем другое. :) Хотя, простыми словами вы не можете скомпилировать код до тех пор, пока не будет javac i.e., который поставляется с JDK. Надеюсь, что он решает ваш запрос. –

0

Если вы хотите скомпилировать код, вам нужен компилятор, поэтому, если у вас не будет ожидаемого компилятора, вам просто придется его связывать.

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

Но в зависимости от ваших потребностей вам может не понадобиться стандарт javac. Там есть тонны библиотек генерации байтового кода, с более или менее высокоуровневой функциональностью. Я бы не хотел рекомендовать то, что у меня нет личного опыта, но примеры включают Byte Buddy или ASM. Возможно, вы также можете использовать ABCL.