首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Scala代码中调用Clojure类

在Scala代码中调用Clojure类
EN

Stack Overflow用户
提问于 2016-02-23 20:57:46
回答 1查看 207关注 0票数 2

我用project.clj编写了一个简单的clojure代码,它具有:

代码语言:javascript
复制
  :uberjar-name "piezojob.jar"
  :aot :all
  :main piezo-jobs.core
  :dependencies [[org.clojure/clojure "1.8.0"]
                 [clojurewerkz/quartzite "2.0.0"]]

我的core.clj是:

代码语言:javascript
复制
(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

代码语言:javascript
复制
 rm -rf extract && mkdir extract && tar -xvf piezojob.jar -C extract

它显示了:

代码语言:javascript
复制
$ 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,则编译将失败,并显示错误:

代码语言:javascript
复制
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是一个宏。

EN

回答 1

Stack Overflow用户

发布于 2016-02-24 08:01:57

问题是您的代码生成了一个mynamespace.core类和一个mynamespace.core包。Scala不喜欢这样,see this bug report。只需从ns定义中删除gen-class指令,因为它所做的全部工作就是生成piezo-jobs.core.class。那么导入应该会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35578251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档