Frage

Ich mag Leiningen verwenden, um mein clojure Projekt aufzubauen und zu entwickeln. Gibt es eine Möglichkeit project.clj zu modifizieren, ihm zu sagen, einige Gläser aus lokalen Verzeichnissen zu holen?

Ich habe einige proprietären Gläser, die nicht auf öffentliche repos hochgeladen werden.

Auch kann Leiningen verwendet werden, um ein „lib“ Verzeichnis für clojure Projekte aufrecht zu erhalten? Wenn ein paar meiner clojure Projekte die gleichen Gläser teilen, möchte ich nicht, eine separate Kopie für jeden von ihnen erhalten.

Danke

War es hilfreich?

Lösung

Sie können Ihre privaten Gläser in lib/ setzen und sie würden für die Zwecke der lein swank und dergleichen auf dem Classpath sein; Dies scheint den Punkt der Verwendung eines Abhängigkeits-Management-Tool zu besiegen, obwohl, wenn Sie nicht wirklich wollen diese Abhängigkeiten verwaltet, Sie Leiningen als „Open-Source-Abhängigkeiten Management-Tool“ behandeln könnte und vielleicht vorsichtig sein, mit lein clean.

Wie die Situation wird immer komplexer - es gibt eine größere Anzahl von privaten Gläser beteiligt, sie entwickeln und Sie müssen einige Versionierung Informationen über sie berücksichtigen -. Arthur Idee eines privaten Maven Repo-Erstellung können geeignetere


(Der HR Leiningen spezifische Teil Zäsur bedeutet ... für Informationen über die allgemeine build / Abhängigkeitsmanagement Werkzeug Geschichte in Clojure Land unter fortsetzen, darunter auch einige Links, die ich denke, kommen in könnte sehr praktisch in Ihre Situation.)

Auch als die noch gibt es keine allgemeine Übereinstimmung über die Frage, welche ist das beste Build-Tool für Clojure und Leiningen, während in Mindshare gewinnt, auch ständig in den Bereichen Features und polieren gewinnt, ist - das heißt, in insbesondere, dass es noch nicht fertig ist. Hier ist ein Zitat von Stuart Halloway, der Autor von Pragmatische Bibliothek der „Programming Clojure“: „Mein 2c: Leiningen ist ein wichtiger Schritt, aber es gibt noch viel zu tun.“ Für den ganzen Beitrag und eine sehr interessante Diskussion Re: Build-Tools und dergleichen in Clojure Raum finden Sie in der Leiningen, Clojure und Bibliotheken: was bin ich dabei Thread auf der Clojure Google-Gruppe?. Viele Teilnehmer erwähnen ausdrücklich die Notwendigkeit, lokale Abhängigkeiten haben nicht in allen Repositories enthalten ist, lokal oder auf andere Weise, und näher auf die Lösungen, die sie mit für solche Szenarien kommen haben. Vielleicht könnten Sie sehen, ob es etwas da drüben, die jetzt Ihr Problem lösen kann / könnte es in Zukunft lösen, wenn Feature-Sets reifen?

Wie auch immer, ist es möglich, dass Leiningen kann in der Tat nicht eine gute Geschichte für einige komplexen Szenarien bereit noch. Wenn Sie dies von Ihrem Fall zutreffen fühlen kann (und ich meine, nachdem Sie die private Repo-Idee betrachten), hier einige Links maven-basierte Alternativen aus dem oben genannten Thread wurden: polyglott maven , clojure-maven-Plugin ; dieser Blog-Posting zielt darauf ab, nützlich zu sein, um Menschen zu verwenden versuchen, maven mit Clojure. Soweit ich mich erinnere, Meikel Brandmeyer (auch auf SO unter seinem Online-Griff kotarak) verwendet Gradle (a Groovy Build-System) mit einem Plugin zu empfangen Clojure Clojuresque genannt; Ich versuchte, es mir nie, wie nicht das erste, was über Groovy wissen, aber er behauptet, mit ihm ein sehr schönes Gebäude wirken zu laufen und ich glaube, dass es nichts bekam ist mit Maven zu tun - etwas, was ein Plus an und für sich ist für einige von uns. : -)

Andere Tipps

Verwenden Sie einfach : resource-Pfade in Ihrer project.clj Datei. Ich benutze es, z.B. Siebel-Server zu verbinden. Gerade erstellt eine Ressourcen Verzeichnis in meinem Projektverzeichnis und die JAR-Dateien in dort kopiert. Aber natürlich können Sie ein allgemeineres Verzeichnis:

(defproject test-project "0.1.0-SNAPSHOT"
:description "Blah blah blah"
...
:resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])

Dann von der lein repl Ich kann Siebel Daten Bean Instanzen erstellen, z.

(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...

Wenn Sie eine neuere Java-Version haben Sie können natürlich die Verwendung von Wildcards in der Pfadangabe, wie dies für eine allgemeinere Verzeichnis:

:resource-paths ["/tmp/SiebelJars/*"]
  1. ein Verzeichnis, in dem Projekt erstellen:

    mkdir maven_repository

  2. In lokalen Gläser zu diesem Repository:

    Zum Beispiel fügt dieser Befehl die jaad-0.8.3.jar Datei in die Maven Repository:

    mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository

  3. Fügen Sie die folgenden project.clj

    :repositories {"local" "file:maven_repository"}

  4. Jetzt eine regelmäßige lein deps sollte funktionieren:

    $ lein deps Downloading: jaad/jaad/0.8.3/jaad-0.8.3.pom from local Transferring 0K from local [WARNING] *** CHECKSUM FAILED - Error retrieving checksum file for jaad/jaad/0.8.3/jaad-0.8.3.pom - IGNORING

kann die Warnung ignoriert werden, da wird das Glas in das Projekt überprüft werden und nicht aus dem Internet heruntergeladen wird.

Ursprüngliche Quelle: lokale JAR der Verwendung von mit Leiningen (da das Kopieren geändert)

Ich finde lein pom; lein jar; lein install funktioniert gut, wenn Bibliotheken zu entwickeln.

Tun Sie dies in der Bibliothek entwickelt und Ihre Anwendung erfordert es es ohne :repositories foo verwenden erforderlich.


Alternativ lein do pom, jar, install ist etwas prägnanter.


Auf dieser Weise kann die Bibliothek wie jeder anderen :dependencies [[project-name "version"]] Aufruf

Ich glaube, der „richtige“ Ansatz zur ein eigenes Maven Repository erstellen , so dass Sie speichern die Gläser in einem einzigen Standort und alle Ihre Filialen usw. werden die Änderungen aufzunehmen. Dies kann zu viel des Guten für das, was Sie tun. Ich bin gespannt, ob diese ist ein einfacher Weg.

Sie können gerne das Plugin lein-localrepo verwenden: https://github.com/kumarshantanu/lein-localrepo

Eine neuere Entwicklung ist Phils s3-wagon-private Plugin für Leiningen: https://github.com/technomancy/ s3-Wagen-privat

Dies sollte Ihnen ermöglichen, Artefakte zu einem privaten Fern Repo zu veröffentlichen.

Keine dieser Lösungen gearbeitet mich. Stattdessen habe ich ein lokales Repository installiert und verwendet Maven die JAR-Datei in der lokalen Repo zu installieren, und hinzugefügt, um die lokalen Repo auf meine project.clj

In Befehlszeile:

mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \
    -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \
    -Durl=file:repo

Und ich schreibe meine project.clj wie folgt aus:

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [local/bar "1.0.0"]]
  :repositories {"project" "file:repo"})

Hoffe, es hilft.

[REFERENZ: https://gist.github.com/stuartsierra/3062743 ]

Vielleicht einen Blick auf diesem vorherige Antwort liefere ich Schritt für Schritt Anweisungen eines Repository lokal für das Projekt zur Einrichtung (durch file:// zugegriffen wird), in dem Sie Ihre Gläser installieren können.

meine Lösung Versuchen Sie, wie jar-Datei erstellen mit Abhängigkeiten http: // middlesphere-1 .blogspot.ru / 2014/06 / how-to-make-jar-with-Abhängigkeiten-using.html

Die beste Option zur Einrichtung ist eine private JFrog / Nexus artifactory und bereitstellen Ihre Schnappschüsse / releases dort und dann, dass artifiactory als Repositories hinzufügen, in Sie project.clj

Weitere einfachere Wege sind

Statische HTTP Die einfachste Art privaten Repository ist ein Web-Server in einem Verzeichnis voller statischer Dateien hingewiesen. Sie können eine Datei: /// URL in Ihrem. Repositories, so zu implementieren, wenn das Verzeichnis auf das Gerät lokal ist, auf dem Leiningen läuft

SCP Wenn Sie bereits einen Server einrichten mit Ihren öffentlichen SSH-Schlüsseln haben, ist der scp Transport eine einfache Art und Weise zu veröffentlichen und private Abhängigkeiten zu verbrauchen. Platzieren Sie das folgende innerhalb defproject:

:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]]
:repositories [["releases" "scp://somerepo.com/home/repo/"]]

Dann legen Sie die folgenden außerhalb der defproject:

(cemerick.pomegranate.aether/register-wagon-factory!
 "scp" #(let [c (resolve 'org.apache.maven.wagon.providers.ssh.external.ScpExternalWagon)]
          (clojure.lang.Reflector/invokeConstructor c (into-array []))))

Es ist auch möglich, ein Repository mit dem scp Transport und konsumieren von ihm über http bereitstellen, wenn Sie einrichten nginx oder etwas ähnliches auf das Repository-Verzeichnis über HTTP dienen.

N. B. SCP setzt auf Clojars werden nicht mehr unterstützt

Ursprüngliche Quelle ist hier https://github.com/technomancy /leiningen/blob/stable/doc/DEPLOY.md

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top