需要为已编译的clojure类创建jar文件

时间:2014-02-24 08:30:44

标签: clojure

我正在学习clojure并且已经完成了作业。

我需要自动编译并构建生成的类的jar。

在clojure代码中,我需要编译另一个clojure代码,编写代码来构建生成的类的jar。

这是我的例子。

even_test.clj

(ns clojure.sqe.examples)

(defn pair-test [test-fn n1 n2]
(if (test-fn n1 n2) "sucess" "failed"))

(println (pair-test #(even? (+ %1 %2)) 3 4)) ; -> pass

compile_test.clj

(ns clojure.sqe.examples
    (:use clojure.test)
    (:require [simple-check.core       :as sc])
)

(compile 'clojure.sqe.examples.even_test)
;(println *compile-path*) => classes

;TO-DO - Write code to
;Build the jar for the compiled classes or from classes folder

; upload this jar to a service . 

2 个答案:

答案 0 :(得分:1)

您需要1.编译代码然后2.创建一个包含已编译代码的JAR文件。

Clojure的compile函数编译代码并将编译后的类文件(可以有多个)放在*compile-path*指定的目录下。

您需要使用JarOutputStream(以及可选的Manifest)创建JAR文件,并将*compile-path*下的所有文件写入JAR。您必须按摩路径,以便将target/repl/classes/clojure/sqe/examples.class这样的文件作为clojure/seq/examples.class放入JAR。

lein jar命令或多或少地执行此操作,因此您可能需要查看其源代码以获取详细信息:https://github.com/technomancy/leiningen/blob/master/src/leiningen/jar.clj

答案 1 :(得分:0)

为什么不使用Leiningen?这是进行Clojure开发的事实上的事实。您可以做很多事情,例如编译Clojure源代码,编译Java源代码,运行单元测试,从porject.clj生成POM文件,当然还有生成JAR文件。

  lein jar
  将所有项目的文件打包成一个jar文件。

     莱因uberjar
  将项目文件和所有依赖项打包到jar文件中。