【发布时间】:2015-06-22 01:39:41
【问题描述】:
我有一个 Java 应用程序,它在这个地址有一个类,在标准 Maven 布局内:
src/main/java/com/ollio/nlp/Transformer.java
我想要的类和方法如下所示:
package com.ollio.nlp;
public class Transformer {
public String transform(String JSONInput) {
我将 jar 工件本地存储在我的 Clojure 应用程序中,地址为:
maven_repository/local/nlp/1.0-SNAPSHOT/nlp-1.0-SNAPSHOT.jar
我尝试了十几种变体将其导入到我的 Clojure 应用程序中,例如:
(:import
[com.ollio.nlp.Transformer])
但我不断收到错误消息“没有这样的命名空间”。
导入这个的正确方法是什么?
已编辑:
这是我目前尝试执行导入语句的方式:
(ns slick.query
(:import
[nlp.*])
我也试过了:
(ns slick.query
(:import
[com.ollio.nlp.*])
我尝试了其他一些变体。
project.clj 文件如下所示:
(defproject slick "0.1"
:description "slick is an API for other ollio services, such as our mobile app."
:dependencies [[org.clojure/clojure "1.6.0"]
[com.taoensso/timbre "3.2.1"]
[dire "0.5.1"]
[slingshot "0.10.3"]
[ring "1.4.0-RC1"]
[clj-time "0.6.0"]
[org.clojure/data.json "0.2.5"]
[compojure "1.3.4"]
[com.novemberain/monger "2.0.1"]
[org.clojure/tools.namespace "0.2.4"]
[manifold "0.1.0"]
[me.raynes/fs "1.4.4"]
[org.clojure/core.incubator "0.1.3"]
[clj-stacktrace "0.2.7"]
[overtone/at-at "1.2.0"]
[ring/ring-json "0.3.1"]
[clj-http "1.1.2"]
[org.clojure/core.cache "0.6.4"]
[cheshire "5.5.0"]
[org.clojure/core.match "0.3.0-alpha4"]
[local/nlp "1.0-SNAPSHOT"]]
:repositories {"local" ~(str (.toURI (java.io.File. "maven_repository")))}
:disable-implicit-clean true
:source-paths ["src/clojure"]
:java-source-paths ["src/java"]
:main slick.core
:aot :all
:jvm-opts ["-Xms100m" "-Xmx1000m" "-XX:-UseCompressedOops"])
【问题讨论】:
-
您在
ns表单中使用:import吗?因为如果你不小心在ns之外使用了:import,你会得到那个错误。最好的办法是使用(ns .... (:import ...))但(import ...)在顶层工作(通常对 repl 有用)。 -
另外,你如何将 maven dep 添加到你的类路径中?您是否使用 maven 来运行 Clojure?使用莱宁根?使用引导?
-
您的项目是如何设置的? java源码树相对于clojure源码树在哪里?
-
艾伦,Java 项目是完全独立的。它保存在标准的默认 Maven 目录结构中。我使用您在上面看到的命令复制了 jar 工件。
-
仍然没有足够的信息来诊断问题。包含“没有这样的命名空间”的完整错误是什么?这真的是错误信息吗? (我试图通过在我的一个项目中创建问题来准确生成该错误消息,但到目前为止还没有成功。)它什么时候发生?有行号吗?那里的源代码发生了什么?您可以使用
lein compile使错误发生吗?你能在 REPL 上使用require实现它吗?requireing 什么?它可能与 Java lib 无关。
标签: java maven clojure interop leiningen