簡體   English   中英

gen-class不生成類

[英]gen-class not generating a class

我在引用通過: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后都必須手動編譯它也是一種痛苦。

在黑暗中拍攝時,我嘗試在ns宏下面使用compile

(compile 'test-proj.test)

如果我使用破折號,那么compile似乎什么也沒做。 我可能會誤解其用法,但它不會在target之下生成類文件。 如果使用下划線,則會出現異常,表明找不到名稱空間。

有沒有一種方法可以自動生成類,所以我不需要每次都運行lein compile 我認為這就是project.clj:aot所做的。

使用Leiningen,指定:aot設置。 :all是最簡單的。

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,它將自行運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM