【问题标题】:Closure Templates through IKVM?通过 IKVM 的闭包模板?
【发布时间】:2012-10-12 01:19:57
【问题描述】:

Google Closure 在没有 Java 运行时环境 by using IKVM 的情况下工作得很好

以防万一,将其转换为 exe 的简化步骤是:

  1. 下载并解压(但没有安装Closure CompilerIKVM
  2. 将 compiler.jar 移至 IKVM bin 文件夹
  3. ikvmc -target:exe -fileversion:2012.09.17 .\compiler.jar(带有 jar 的发布日期)。注意:我收到了一些关于 ANT 库的警告。
  4. 将这些依赖项从 ikvm bin 目录复制到闭包目录:
    • IKVM.OpenJDK.Core.dll
    • IKVM.OpenJDK.Jdbc.dll
    • IKVM.OpenJDK.Misc.dll
    • IKVM.OpenJDK.SwingAWT.dll
    • IKVM.OpenJDK.Text.dll
    • IKVM.OpenJDK.Util.dll
    • XML.API.dll
    • IKVM.Runtime.dll

然后您可以将 compiler.jar 和新的 compiler.exe 移回您的闭包目录。 Fredrik 推荐使用这种 powershell 版本的执行,因为它能够指定覆盖 unicode 的 ascii 编码(一半字节):

.\compiler.exe --js .\jquery-1.4.2.js --warning_level QUIET | out-file -encoding ascii .\jquery.min.js

================================

但是,我对 Closure Templates 的 SoyToJsSrcCompiler.jar 没有同样的运气。我收到来自ikvmc -target:exe -fileversion:2011.12.22 .\SoyToJsSrcCompiler.jar 的警告,就像compiler.jar 一样。

warning IKVMC0105: Unable to compile class "com.google.template.soy.jssrc.internal.GenerateSoyUtilsEscapingDirectiveCode"
    (missing class "org.apache.tools.ant.Task")
warning IKVMC0100: Class "com.google.inject.internal.asm.util.$TraceClassVisitor" not found
warning IKVMC0111: Emitted java.lang.NoClassDefFoundError in "com.google.inject.internal.cglib.core.$DebuggingClassWriter$1.run()Ljava.lang.Object;"
    ("com.google.inject.internal.asm.util.$TraceClassVisitor")
warning IKVMC0100: Class "com.google.template.soy.jssrc.internal.GenerateSoyUtilsEscapingDirectiveCode" not found

不带命令行参数的 SoyToJsSrcCompiler.exe 可用于显示帮助页面,但提供 .soy 文件会给出:

Exception in thread "main" cli.System.MethodAccessException: 
com.google.inject.assistedinject.FactoryProvider2.getBindingFromNewInjector(java.lang.reflect.Method, System.Object[], AssistData) at 
com.google.inject.assistedinject.FactoryProvider2$$FastClassByGuice$$9dcdf6d7.invoke() at 
com.google.inject.internal.cglib.reflect.$FastMethod.invoke(FastMethod.java:53) at 
com.google.inject.internal.SingleMethodInjector$1.invoke(SingleMethodInjector.java:56) at 
com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:90) at 
com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:107) at 
com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:76) at 
com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73) at 
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) at 
com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:88) at
com.google.inject.internal.Initializer$InjectableReference.get(Initializer.java:150) at 
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at 
com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53) at 
com.google.inject.internal.InjectionRequestProcessor$StaticInjection$1.call(InjectionRequestProcessor.java:11 6) at 
com.google.inject.internal.InjectionRequestProcessor$StaticInjection$1.call(InjectionRequestProcessor.java:11 0) at 
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) at 
com.google.inject.internal.InjectionRequestProcessor$StaticInjection.injectMembers(InjectionRequestProcessor. java:110) at 
com.google.inject.internal.InjectionRequestProcessor.injectMembers(InjectionRequestProcessor.java:78) at 
com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:171) at 
com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:111) at 
com.google.inject.Guice.createInjector(Guice.java:95) at 
com.google.inject.Guice.createInjector(Guice.java:72) at 
com.google.template.soy.MainClassUtils.createInjector(MainClassUtils.java:212) at 
com.google.template.soy.SoyToJsSrcCompiler.execMain(SoyToJsSrcCompiler.java:223) at 
com.google.template.soy.SoyToJsSrcCompiler.main(SoyToJsSrcCompiler.java:205)

有人知道如何让它工作吗?

【问题讨论】:

  • 哦,不过我也刚从微软那里学到了 TypeScript,看起来更神奇。

标签: google-closure-compiler ikvm


【解决方案1】:

异常可能是 IKVM 中的错误。您使用哪个版本?测试最新版本。

警告 IKVMC0100:找不到类“com.google.template.soy.jssrc.internal.GenerateSoyUtilsEscapingDirectiveCode”

另一个问题可能是您没有为 SoyToJsSrcCompiler.jar 编译所有需要的 jar 文件。这个缺少的类文件在哪个 jar 文件中?看看wiki,看看你是如何编译多个jar文件的。

下一个问题可能是不同的jar文件中存在同一个包。对于某些方法,只有包可见,这不适用于 .NET。您可以测试一个共享类加载器。详情请见wiki

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多