我正在尝试使用我的Java代码中的Google Closure Compiler API。函数compile()接收原始源代码,并以String形式返回已编译的源代码。
此代码将在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();
}
答案 0 :(得分:2)
在编译时,我收到警告“在服务器的类路径上将无法使用compiler.jar”。
您可能需要将compiler.jar移动到WEB-INF/lib
。
这可能是500的原因:如果你没有将compiler.jar部署为你的webapp的一部分,你的servlet(或其他)将失败并带有NoClassDefFoundError
。
答案 1 :(得分:2)
如果您还没有这样做,则需要在编译器中禁用线程以在app引擎上运行:请参阅Compiler.java中的“disableThreads”
通常,编译器会生成一个新线程,以确保它具有大于标准的堆栈。
答案 2 :(得分:2)
试试这个:
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();
}