SBT项目中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

tl;dr:从scala代码调用clojure编译器生成的
.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