Можно ли установить уровень оптимизации для RhinoScriptEngine в Java 6?

Я столкнулся с проблемой, когда 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. Есть ли другие варианты?

7
задан bolinfest 9 August 2011 в 17:14
поделиться