gen-class没有生成一个类

时间:2017-09-27 12:45:02

标签: clojure gen-class

我很难引用通过df.tail生成的类。

我能展示的最小例子证明问题是:

print(df.tail()['Close'].to_frame()) 
                   Close
Date       minor        
2017-09-26 FB     164.21
           GDX     23.35
           IWM    144.61
           QQQ    143.17
           SPY    249.08
:gen-class

问题是,这会在标记的行上产生(defproject test-proj :dependencies [[org.clojure/clojure "1.8.0"]] :aot [test-proj.test])

(我在上面的文件和(ns test-proj.test (:gen-class)) (defn -main [] (println test_proj.test)) ; Error here 中尝试了ClassNotFoundException-的所有不同组合。我仍然不完全明白什么需要下划线和什么容忍破折号。有些东西似乎用破折号滚动并根据需要转换它们,而我知道在_中弄乱它,我需要使用下划线来引用project.clj。)

如果我进入项目根文件,则没有-main文件夹,因此它不会生成类。如果我进入终端并运行test_proj.test,它会在target下生成所需的类,并且上面的代码运行时没有错误。这是一个糟糕的解决方法。如果我修改文件并忘记手动重新编译它会怎么样?在我执行lein compile之后必须手动编译它也很痛苦。

在黑暗中拍摄时,我尝试在target宏下使用clean

compile

如果我使用破折号,ns似乎没什么用。我可能误解了它的用法,但它不会在(compile 'test-proj.test) 下生成类文件。如果我使用下划线,它会给出一个例外,说明找不到命名空间。

有没有办法让类自动生成,所以我不需要每次都运行compile?我认为这就是target中的lein compile所做的。

1 个答案:

答案 0 :(得分:1)

使用Leiningen,指定:aot settings。 :一切都是最简单的。

project.clj

(defproject test-proj "0.1.0-SNAPSHOT"
  :main test-proj.core
  :aot :all
  :dependencies [[org.clojure/clojure "1.8.0"]])

如果需要,可以在数组中指定确切的名称空间,如下所示:

project.clj

(defproject test-proj "0.1.0-SNAPSHOT"
  :main test-proj.core
  :aot [test-proj.core]
  :dependencies [[org.clojure/clojure "1.8.0"]])

然后是以下lein命令:

lein compile

将生成上述:aot设置中指定的字节码和.class文件。

core.clj

(ns test-proj.core
    (:gen-class))

(defn -main[]
  (println test_proj.core)
  (println "Hello, World!"))

您希望看到类似下面的内容:

NikoMacBook% lein compile 
Compiling test-proj.core

完成后,检查目标文件夹,包含正确的类文件,此处为test_proj / core.class。

NikoMacBook% tree target 
target
├── classes
│   ├── META-INF
│   │   └── maven
│   │       └── test-proj
│   │           └── test-proj
│   │               └── pom.properties
│   └── test_proj
│       ├── core$_main.class
│       ├── core$fn__38.class
│       ├── core$loading__5569__auto____36.class
│       ├── core.class
│       └── core__init.class
└── stale
    └── leiningen.core.classpath.extract-native-dependencies

7 directories, 7 files

以下将运行:main命名空间,所以test-proj.core。

lein run 

将输出

NikoMacBook% lein run 
Compiling test-proj.core
Compiling test-proj.core
test_proj.core
Hello, World!

请注意,该类正在调用自身。另请注意,如果您未预先运行lein compile,它将自行运行。