2013-10-12 10 views
13

Ich möchte eine Anzahl von Uberjar mit verschiedenen main Einstiegspunkten aus einer Codebasis erstellen. Ich sehe, dass Sie den Namespace main als Argument für lein uberjar angeben können, aber ich sehe keine Möglichkeit, den resultierenden Dateinamen oder Pfad anzugeben, damit sie sich gegenseitig überschreiben. Gibt es eine Möglichkeit, den Ausgabedateinamen oder -pfad von der Befehlszeile aus zu überschreiben?Erstelle mehrere Überjars in Leiningen

Oder gibt es eine bessere Möglichkeit, dies zu tun? Haben Sie separate Projektdateien, die alle auf ein zentrales "Bibliothek" -Projekt verweisen? Wenn ja, wie würde die physische Struktur aussehen und wie wird sie aufgebaut?

Antwort

19

Sie können mehrere Leiningen profiles verwenden, um zu erreichen, worüber Sie sprechen.

(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"}}) 

Und Sie können sie mit bauen:

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

Ich bemerke, dass der resultierende JAR-Dateiname nicht durch die Option ': Uberjar-name' modifiziert wird. Anscheinend muss '' name' 'im Profil eingestellt werden, um verschiedene benannte JAR-Dateien zu erzeugen. – Adam

+1

Es gibt ein Problem mit Leiningen 2.5.0 um das Ignorieren der ': Uberjar-name' Innenprofile. Es soll mit Leiningen gelöst werden. 2.5.2. https://github.com/technomancy/leiningen/issues/1718 – Jared314

1

Hier eine annotated reference Quelle, wo Sie eine Option für die Angabe eines Namens, Ihrer Ausgabe jar oder uberjar Datei und alle anderen Optionen finden können, können in einer project.clj Datei festgelegt werden.

;;; 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" 
Verwandte Themen