Я столкнулся с проблемой, когда Rhino выдает исключение «Обнаружена ошибка генерации кода при компиляции скрипта: сгенерированный байт-код для метода превышает предел в 64 КБ» при запуске Rhino через ] javax.script.ScriptEngine
API. Принятое решение - вызвать setOptimizationLevel (-1)
в sun.org.mozilla.javascript.Context
.
К сожалению, я не могу получить доступ к Контекст
, который создается ContextFactory
. Я попытался добавить ContextFactory.Listener
в ContextFactory.getGlobal ()
, который изменил бы Context
после создания, но мой слушатель, похоже, никогда не вызывается. Я также взглянул на исходный код RhinoScriptEngine из Java 6 , чтобы узнать, есть ли свойство, которое я мог бы установить, из которого ContextFactory
будет читать, чтобы определить значение оптимизации.
Насколько я могу судить, в Java 7 RhinoScriptEngine
устанавливает уровень оптимизации на -1
по умолчанию и позволяет установить уровень оптимизации посредством свойства rhino.opt.level
. Сравните метод makeContext ()
в версии Java 7 с методом makeContext ()
в версии Java 6 , чтобы увидеть, что я означают.
Насколько я могу судить, я считаю, что лучшим вариантом для меня будет запуск Rhino напрямую, как показано в этом примере использования Rhino для запуска компилятора CoffeeScript . Хотя, как вы можете видеть, код намного сложнее, поэтому я бы предпочел использовать API javax.script.ScriptEngine
, если возможно, продолжая поддерживать Java 6. Есть ли другие варианты?