簡體   English   中英

在Scala代碼中調用Clojure類

[英]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.jarlib文件夾中。

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM