在我Leiningen項目:如何編譯Java代碼的Clojure代碼後leiningen
(defproject com.stackoverflow.clojure/tests "0.1.0-SNAPSHOT"
:description "Tests of Clojure test-framework."
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.6.0"]
[instaparse "1.3.4"]]
:aot [com.stackoverflow.clojure.testGenClass]
:source-paths ["src/main/clojure"]
:java-source-paths ["src/main/java"]
:test-paths ["src/test/clojure"]
:java-test-paths ["src/test/java"]
)
我生成與根級的Java類:
(ns com.stackoverflow.clojure.testGenClass
(:gen-class
:name com.stackoverflow.clojure.TestGenClass
:implements [com.stackoverflow.clojure.TestGenClassInterface]
:prefix "java-"))
(def ^:private pre "START: ")
(defn java-addToString [this text post]
(str pre text post))
,我想在使用Java的:
package com.stackoverflow.clojure;
public class TestGenClassTest {
private TestGenClassTest() {
}
public static void main(String[] args) {
TestGenClassInterface gc = new TestGenClass();
System.out.println(gc.addToString("Called from Java!", " :END"));
}
}
開始lein compile
引發以下錯誤:
Compiling 4 source files to /home/eddy/workspace/TestSkripts/target/classes
/home/eddy/workspace/TestSkripts/src/main/java/com/stackoverflow/clojure/TestGenClassTest.java:9: error: cannot find symbol
TestGenClassInterface gc = new TestGenClass();
^
symbol: class TestGenClass
location: class TestGenClassTest
1 error
在我看來,在編譯Java代碼(此處爲:TestGenClassTest
)時,該類不可用。我通常所做的是
- 註釋掉那些使用GEN-類生成的類(這裏
TestGenClass
) - 運行
lein compile
部分(生成類文件) - 然後再採取outcommented代碼
- 並再次運行
lein compile
。
我確定有一個更好的方法,這使得所有的手動步驟被刪除。
那麼配置文件看起來像怎麼樣,先編譯接口'com.stackoverflow.clojure .TestGenClassInterface'使用javac(必要時)然後編譯實現接口的Clojure部分('com.stackoverflow.clojure.TestGenClass'),然後編譯Java主程序?它是兩個額外的配置文件,還是一個?使用path-statements調用正確的編譯器嗎? – Edward 2014-10-17 11:56:38
哎呀,我不小心低估了這一點。 – matanster 2017-03-31 17:50:58
不,正如我所見,正確的編譯器不會從路徑語句中自動傳入。 – matanster 2017-03-31 18:16:45