2015-01-20 42 views
0

我想做到以下几点:我用Clojure写的/ ClojureScript一个简单的函数:生成Clojurescript一个Java类使用犀牛

(defn add 
    [a b] 
    (+ a b)) 

我想换这个功能为Java类,并把它在一个jar文件中,以便我可以在现有的Java/Android项目中访问它。我以前的做法是使用gen-并创建一个uberjar。然而这导致一些problems

作为一种替代方法,我考虑使用ClojureScript编译函数(解决方案也由Sam Beran提出)。

到目前为止,我知道如何:

我没有挣扎,以获得将ClojureScript输出成可传递给Rhino编译器的格式。

有什么想法?

重要提示:我希望创建一类具有一个主要功能是done here

在构建时:中要对此将

回答

1

一种通用的方式

  • 运行ClojureScript编译器生成的JavaScript文件
  • 把JavaScript文件到资源目录。
  • 编译使用它
  • 做一个jar文件(Uberjar或正常Unterjar)的Java类

这个Java类应该:

  • 做一个Java类,在初始化启动up Rhino
  • on instantiation从资源运行javascript。

在桌面上的服务器上,你可能得不到相同的真棒启动时间我的。 Beran在android上报道,因为android上的进程具有启动生命的优势,Rhino准备开始运行(从Zygote进程继承它)

+1

是的。但是这种方法会产生问题。来自Sam Berans的帖子:“[......],启动速度大约为8-10秒 - 甚至比JVM Clojure还差!一些快速测量表明,大部分时间都是用Rhino解析JS源代码的cljs/core。 js。我很高兴地发现Rhino支持通过jsc实用程序进行字节码预编译[3]。我能够将ClojureScript输出预编译为字节码,并且实现了更快的启动速度 - 约150ms。这完全在目标性能范围内,并且足够快以消除任何明显的UI滞后。“ – 2015-01-21 07:52:03