我用project.clj编写了一个简单的clojure代码,它具有:
: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."))我在我的target文件夹中解压了.jar:
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在我的scala项目中,我复制了lib文件夹中的piezojob.jar。
在其中一个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是一个宏。
发布于 2016-02-24 08:01:57
问题是您的代码生成了一个mynamespace.core类和一个mynamespace.core包。Scala不喜欢这样,see this bug report。只需从ns定义中删除gen-class指令,因为它所做的全部工作就是生成piezo-jobs.core.class。那么导入应该会起作用。
https://stackoverflow.com/questions/35578251
复制相似问题