maven - 在 Clojure 中需要具有本地 Maven 存储库的 Java 类和命名空间组织

标签 maven clojure namespaces dependencies repository

所以我想我一般理解需要和导入命名空间,例如 Clojure 源代码具有以下目录结构: clojure/src/clj/clojure/java/io.clj 。这意味着我可以要求这样的事情:

user> (ns foo
        (:require [clojure.java.io :as io]))
nil
foo> io/copy
#<io$copy clojure.java.io$copy@35f784d7>

我将其解释为在 io.clj 文件中有一个名为 copy 的函数,该函数位于该命名空间 clojure.java.io 中,我现在可以在需要该命名空间时使用它。

现在我的具体问题。我需要使用一个库,但 jar 不在 maven 上,所以我以标准方式设置了一个本地存储库,它工作正常。所以我现在在两个地方有需要的 jar :
/Users/ryanmoore/projects/proj_foo/maven_repo/net/sf/picard/1.86


/Users/ryanmoore/.m2/repository/net/sf/picard/1.86

问题出在 jar 内部,这些类的名称如下
net/sf/picard/illumina/parser/readers/MMapBackedIteratorFactory.class
net/sf/picard/io/FastLineReader.class
net/sf/picard/metrics/MetricsFile.class
net/sf/picard/reference/FastaSequenceIndexEntry.class

我在要求这些类(class)时遇到了麻烦,例如:
user> (require '[net.sf.picard.io/FastLineReader :as flr])
FileNotFoundException Could not locate FastLineReader__init.class or FastLineReader.clj on      classpath:   clojure.lang.RT.load (RT.java:432)

我认为这与不匹配的名称和路径有关。在这个堆栈问题 What are common conventions for using namespaces in Clojure? ,它指出目录结构中的文件必须与命名空间匹配,否则 Clojure 将无法找到它们。

我的问题是我应该如何设置文件夹以便 Clojure 可以找到所有内容?

注意:Clojars 上有一个 picardtools 版本,但它是旧版本。另外,我尝试过,并且遇到了与上述相同的问题。

编辑:感谢 mobyte 的回答,我现在得到了“Java 类被导入,不是必需的”。从这里 How to require java classes in clojure/leiningen是指。

最佳答案

您需要使用 import使用 Java 类

(import '[net.sf.picard.io FastLineReader])
require用于 Clojure 库:http://clojuredocs.org/clojure_core/clojure.core/require .

关于maven - 在 Clojure 中需要具有本地 Maven 存储库的 Java 类和命名空间组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15261309/

相关文章:

clojure - 将新的键值对添加到 clojure 中的 struct-map

c++ - C++ 无法识别来自单独 .cpp 文件中相同命名空间的自由函数

c++ - 如果在命名空间中,Doxygen 会复制成员组

java - Maven 私有(private)依赖

maven - 如何使用 maven 从命令行将参数传递给 testng.xml

Clojure - 如何使 def 表单在运行时而不是编译时评估

c++ - 执行限定名称查找时 Clang 和 GCC 之间的不同行为

Maven 未授权,ReasonPhrase :Unauthorized

java - 是否可以在 Linux 下构建 JNI .dll?

clojure - Immutant 是否可以配置为使用 8080 以外的其他协议(protocol)以及使用 SSL?