【问题标题】:Using Google Closure's "compiler.jar" in Google App Engine在 Google App Engine 中使用 Google Closure 的“compiler.jar”
【发布时间】:2012-03-27 08:20:02
【问题描述】:

我正在尝试从我的 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();
}

【问题讨论】:

  • “服务器错误”只是显示了 500 个页面用户 - 堆栈跟踪在您的服务器日志中(在管理控制台中的日志下)。这说明了什么?

标签: javascript google-app-engine gwt google-closure-compiler


【解决方案1】:

试试这个:

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】:

在编译时,我收到警告“compiler.jar 在服务器的类路径上不可用”。

您可能需要将 compiler.jar 移至您的 WEB-INF/lib

这可能是 500 的原因:如果您不将 compiler.jar 作为 web 应用程序的一部分部署,您的 servlet(或其他)将失败并显示 NoClassDefFoundError

【讨论】:

    【解决方案3】:

    如果您还没有这样做,则需要在编译器中禁用线程以在应用引擎上运行:请参阅 Compiler.java 中的“disableThreads”

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

    通常,编译器会生成一个新线程以确保它具有比标准堆栈更大的堆栈。

    【讨论】:

      猜你喜欢
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      相关资源
      最近更新 更多