Я столкнулся с проблемой, когда Rhino выдает "Ошибка генерации обнаруженного кода при компиляции скрипта: сгенерированный байт-код для метода превышает ограничение в 64 КБ" исключение при запуске Rhino через javax.script.ScriptEngine
API.Кажется, что принятым решением является setOptimizationLevel(-1)
для sun.org.mozilla.javascript.Context
.
К сожалению, я не могу получить доступ к 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. Есть ли другие варианты?