2013-10-12 49 views
13

我想從一個代碼庫創建一些具有不同main入口點的uberjars。我看到你可以指定main命名空間作爲參數lein uberjar,但我沒有看到一種方法來指定結果文件名或路徑,所以它們只會覆蓋另一個。有沒有辦法覆蓋命令行的輸出文件名或路徑?在leiningen創建多個uberjars

或者有沒有更好的方法來做到這一點?有獨立的項目文件,都參考中央「圖書館」項目?如果是這樣,這個外觀的物理結構是什麼,以及如何建立它?

回答

19

您可以使用多個Leiningen profiles來完成您正在談論的內容。

(defproject project1 "0.1.0-SNAPSHOT" 
    :description "Something Amazing!" 
    :dependencies [[org.clojure/clojure "1.5.1"]] 
    :profiles {:v1 {:main project1.core1 
        :uberjar-name "uberjar1.jar"} 
      :v2 {:main project1.core2 
        :uberjar-name "uberjar2.jar"} 
      :v3 {:main project1.core3 
        :uberjar-name "uberjar3.jar"}}) 

而且,你可以建立他們:

$ lein with-profile v1:v2:v3 uberjar 
+1

我注意到的是,產生的JAR文件名不被'修改:uberjar-name'選項。看起來像':name'必須在配置文件中設置,而不是爲了生成不同的命名jar文件。 – Adam

+1

Leiningen 2.5.0在配置文件內忽略':uberjar-name'的問題。它計劃與Leiningen 2.5.2一起解決。 https://github.com/technomancy/leiningen/issues/1718 – Jared314

1

下面是一個annotated reference源在那裏你可以找到一個選項,指定你的輸出JAR或uberjar文件和任何其他選項的名稱可能設置爲project.clj文件。

;;; Jar Output 
;; Name of the jar file produced. Will be placed inside :target-path. 
;; Including %s will splice the project version into the filename. 
:jar-name "sample.jar" 
;; As above, but for uberjar. 
:uberjar-name "sample-standalone.jar"