I have a simple clojure code with project.clj
having :
:uberjar-name "piezojob.jar"
:aot :all
:main piezo-jobs.core
:dependencies [[org.clojure/clojure "1.8.0"]
[clojurewerkz/quartzite "2.0.0"]]
My core.clj is :
(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."))
I extracted the .jar
in my target
folder :
rm -rf extract && mkdir extract && tar -xvf piezojob.jar -C extract
and it shows :
$ tree target/extract/piezo_jobs/core
target/extract/piezo_jobs/core
└── SimpleJob.class
0 directories, 1 file
In my scala project, i have copied piezojob.jar
in lib
folder.
In one of scala file, i added :
import piezo_jobs._
sbt compile
is happy.
However, if i replace it with :
import piezo_jobs.core._
or import piezo_jobs.core.SimpleJob
then compiling fails with error :
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
Why it is failing ?
FYI, defjob
is a macro.
The problem is that your code generates both a
mynamespace.core
class and amynamespace.core
package. Scala doesn't like that, see this bug report. Simply remove thegen-class
directive from your ns definition, since all it does is generatepiezo-jobs.core.class
. Then the import should work.