[英]Calling Clojure classes in Scala code
我有一個簡單的clojure代碼與project.clj
具有:
:uberjar-name "piezojob.jar"
:aot :all
:main piezo-jobs.core
:dependencies [[org.clojure/clojure "1.8.0"]
[clojurewerkz/quartzite "2.0.0"]]
我的core.clj是:
(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
它顯示:
$ tree target/extract/piezo_jobs/core
target/extract/piezo_jobs/core
└── SimpleJob.class
0 directories, 1 file
在我的斯卡拉項目,我抄piezojob.jar
中lib
文件夾中。
在scala文件之一中,我添加了:
import piezo_jobs._
sbt compile
很高興。
但是,如果我將其替換為: import 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
為什么會失敗?
僅供參考, defjob
是一個宏。
問題在於您的代碼同時生成了mynamespace.core
類和mynamespace.core
包。 Scala不喜歡那樣, 請參閱此錯誤報告 。 只需從ns定義中刪除gen-class
指令,因為它所做的只是生成piezo-jobs.core.class
。 然后導入應該起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.