SBT项目中Clojure编译器的输出
tl;dr:从scala代码调用clojure编译器生成的SBT项目中Clojure编译器的输出,clojure,compilation,sbt,playframework-2.0,clojure-java-interop,Clojure,Compilation,Sbt,Playframework 2.0,Clojure Java Interop,tl;dr:从scala代码调用clojure编译器生成的.class文件的意外布局 我有一个SBT项目(使用playframework),其中包含一些clojure代码。正在从build.sbt文件中调用clojure编译器。是调用clojure编译器的scala代码(归功于:) 编译器正在输出.class文件,但不是我期望的布局(基于ns定义) 如果我按如下方式定义clojure命名空间: (ns api.datastore.foo (:require [clojure.core.asy
.class
文件的意外布局
我有一个SBT项目(使用playframework),其中包含一些clojure代码。正在从build.sbt
文件中调用clojure编译器。是调用clojure编译器的scala代码(归功于:)
编译器正在输出.class
文件,但不是我期望的布局(基于ns
定义)
如果我按如下方式定义clojure命名空间:
(ns api.datastore.foo
(:require [clojure.core.async :refer (<!!)]
[datomic.client :as client])
(:gen-class
:methods [#^{:static true} [bar [java.util.List] clojure.lang.ISeq]])
当我尝试调用此代码中的任何一个(例如函数bar
)时,会出现以下错误:
…java.io.FileNotFoundException:在类路径上找不到api/datastore/foo\u init.class或api/datastore/foo.clj
将我的命名空间(注意:name
键)的定义更改为:
。。。而且它有效
但是,现在我的clojure源没有任何目录结构(所有都必须在app/
中),这是一个问题,原因有很多。在没有:name
键的情况下,是否仍可以执行此操作(即,从不可用的命名空间定义中获取可用的目标目录结构)
└── classes
├── foo__init.class
└── api
└── datastore
├── foo.class
├── foo$fn__3.class
├── foo$loading__5569__auto____1.class
└── foo$_bar.class
(ns foo
(:require [clojure.core.async :refer (<!!)]
[datomic.client :as client])
(:gen-class
:name api.datastore.foo
:methods [#^{:static true} [bar [java.util.List] clojure.lang.ISeq]])
└── classes
├── foo__init.class
├── foo$fn__3.class
├── foo$loading__5569__auto____1.class
├── foo$_bar.class
└── api
└── datastore
└── foo.class