2011-10-12 19 views
0

java -cp clojure.jar clojure.main compile.clj這是編譯clojure代碼。 javac CalculateSum.java編譯java代碼。 jar cvf sum.jar * .class獲取類文件的jar文件。如何運行包含clojure和java代碼編譯的類文件的jar文件。 java文件包含主要方法

java CalculateSum正在運行main並給出正確的輸出。 如何從java環境運行jar文件? like java -cp clojure.jar; sum.jar clojure.main CalculateSum其中CalculateSum是主類。

示例代碼 _ utils.clj _

(ns utils
(:gen-class :name Utils :methods [#^{:static true} [sum [java.util.Collection] long]])) (defn sumx [coll] (reduce + coll)) (defn -sum [coll] (sumx coll))

compile.clj

(set! *compile-path* "./") (compile 'utils)

CalculateSum.java public class CalculateSum { public static void main(String[] args) { java.util.List<Integer> xs = new java.util.ArrayList<Integer>(); xs.add(10);
xs.add(5); System.out.println(Utils.sum(xs)); } }

目標是使jar文件不符合此代碼。並運行jar文件

的java應該叫Clojure的代碼,執行它,並打印結果

+0

目前還不清楚jar文件中的所有類是否都是no,以及jar文件是否包含說明主類,類路徑依賴關係等的清單。一些示例代碼將會很有用。 –

+0

@JonSkeet我編輯了這個問題,現在你可以看到代碼了。 – vikbehal

+0

但沒有一個jar文件manaifest的跡象。編譯的clojure代碼結束的地方也不清楚 - 你是否也將它包含在jar文件中? –

回答

1

好了,有兩件事情:

  • 要運行它從罐子只是文件而不是將其製作爲可執行的jar文件,您應該可以正好使用:

    java -cp sum.jar CalculateSum 
    

    或可能(如果它在執行時需要從closure.jar類)

    java -cp closure.jar;sum.jar CalculateSum 
    
  • 把它變成你可以用

    java -jar sum.jar 
    

    運行,你需要一個manifest可執行的JAR文件文件,其中包含Main-Class屬性,可讓您將entry point以及可能的Class-Path屬性設置爲add the closure.jar file to the jar's classpath

請點擊鏈接瞭解更多詳情。

+0

謝謝。這正在運行! – vikbehal

相關問題