在Scala代码中调用Clojure类

时间:2016-02-23 12:57:46

标签: scala clojure jvm-languages

我有一个简单的clojure代码Earthling有:

project.clj

我的core.clj是:

  :uberjar-name "piezojob.jar"
  :aot :all
  :main piezo-jobs.core
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [clojurewerkz/quartzite "2.0.0"]]

我在(ns piezo-jobs.core (:require [clojurewerkz.quartzite.jobs :refer [defjob]]) (:gen-class)) (defjob SimpleJob [ctx] (println "Running a awesome job. piezo-jobs.core.")) (defn -main [] (println "piezo-jobs.core.-main being called.")) 文件夹中提取了.jar

target

它显示:

 rm -rf extract && mkdir extract && tar -xvf piezojob.jar -C extract

在我的scala项目中,我已将$ tree target/extract/piezo_jobs/core target/extract/piezo_jobs/core └── SimpleJob.class 0 directories, 1 file 复制到piezojob.jar文件夹中。

在scala文件中,我添加了:

lib

import piezo_jobs._很高兴。

但是,如果我将其替换为: sbt compileimport piezo_jobs.core._ 然后编译失败并出现错误:

import piezo_jobs.core.SimpleJob

为什么会失败?

仅供参考,r.scala:8: object core is not a member of package piezo_jobs [error] import piezo_jobs.core._ [error] ^ [error] one error found [error] (compile:compileIncremental) Compilation failed 是一个宏。

1 个答案:

答案 0 :(得分:0)

问题是您的代码会生成mynamespace.core类和mynamespace.core包。斯卡拉不喜欢这样,see this bug report。只需从ns定义中删除gen-class指令,因为它只会生成piezo-jobs.core.class。然后导入应该工作。