这是目录结构。
继续操作OP中的脚本引擎示例,Clojure等效项为:
(ns com.domain.example (:gen-class) (:import (java.io InputStreamReader)) (:import (javax.script scriptEngineManager scriptEngine)))(defn load-resource [name] (let [rsc-name (str "com/domain/resources/" name) thr (Thread/currentThread) ldr (.getContextClassLoader thr)] (.getResourceAsStream ldr rsc-name)))(defn markdown-to-html [mkdn] (let [manager (new scriptEngineManager) engine (.getEngineByName manager "js") is (InputStreamReader. (load-resource "showdown.js")) _ (.eval engine is) cnv-arg (str "new Showdown.converter().makeHtml("" mkdn "")")] (.eval engine cnv-arg)))(defn -main [] (println (markdown-to-html "plain, *emphasis*, **strong**")))请注意,该资源的路径是
com/domain/resources针对此代码的,而不是
com/domain/scriptingtest/resourcesJava版本。在clojure版本中,源文件
example.clj位于中
com/domain。在Java版本中,源文件
Example.java位于
com/domain/scriptingtest软件包中。
在我的IDE
NetBeans中设置项目时,Java项目向导会要求提供源的封装包。Clojure插件enclojure要求一个名称空间,而不是一个包。我以前从未注意到这种差异。因此,预期的目录结构中的“
off-by-one”错误。



