Использование Google Compsure "compiler.jar" в Google App Engine - PullRequest
2 голосов
/ 27 марта 2012

Я пытаюсь использовать API Google Closure Compiler из моего кода Java.Функция compile () получает исходный исходный код и возвращает скомпилированный исходный код в виде строки.

Этот код будет работать в Google App Engine, но при его развертывании и запуске я получаю «ошибку сервера».Без вызова функции ниже я не получаю никаких ошибок.Во время компиляции я получаю предупреждение "compiler.jar не будет доступен на пути к классам сервера".Compiler.jar - это библиотека, которую я скачал с веб-сайта проекта Closure Compiler.

Есть идеи, как это обойти?

Спасибо за миллион,

import com.google.javascript.jscomp.*;

public static String compile(String code)
{
    com.google.javascript.jscomp.Compiler.setLoggingLevel(Level.INFO);
    com.google.javascript.jscomp.Compiler compiler = new com.google.javascript.jscomp.Compiler();

    CompilerOptions options = new CompilerOptions();
    CompilationLevel.SIMPLE_OPTIMIZATIONS.setOptionsForCompilationLevel(options);

    JSSourceFile js = JSSourceFile.fromCode("input.js", code);

    WarningLevel.QUIET.setOptionsForWarningLevel(options);      
    compiler.compile(null, js, options);

    return compiler.toSource();
}

Ответы [ 3 ]

2 голосов
/ 27 марта 2012

Если вы еще этого не сделали, вам нужно отключить многопоточность в компиляторе для запуска на движке приложения: см. «DisableThreads» в Compiler.java

http://code.google.com/p/closure-compiler/source/search?q=Compiler.java&origq=Compiler.java&btnG=Search+Trunk

ОбычноКомпилятор создает новый поток, чтобы быть уверенным, что его стек больше стандартного.

2 голосов
/ 06 июня 2017

попробуйте это:

import com.google.javascript.jscomp.*;

public static String compile(String code)
{
    com.google.javascript.jscomp.Compiler.setLoggingLevel(Level.INFO);
    com.google.javascript.jscomp.Compiler compiler = new 
    com.google.javascript.jscomp.Compiler();

    CompilerOptions options = new CompilerOptions();
    CompilationLevel.SIMPLE_OPTIMIZATIONS.setOptionsForCompilationLevel(options);

    JSSourceFile js = JSSourceFile.fromCode("input.js", code);
    List<SourceFile> list = new ArrayList<SourceFile>();
    list.add(js);

    WarningLevel.QUIET.setOptionsForWarningLevel(options);      
    compiler.compile(new ArrayList<SourceFile>(), list, options);

    return compiler.toSource();
 }
2 голосов
/ 27 марта 2012

Во время компиляции я получаю предупреждение "compiler.jar не будет доступен на пути к классам сервера".

Возможно, вам придется переместить compiler.jar к вашему WEB-INF/lib.

это, вероятно, причина для 500: если вы не развернете compiler.jar как часть вашего веб-приложения, ваш сервлет (или что-то еще) потерпит неудачу с NoClassDefFoundError.

...