Ich möchte mit leiningen mein clojure-projekt aufbauen und entwickeln. Gibt es eine Möglichkeit, project.clj so zu ändern, dass es einige Gläser aus lokalen Verzeichnissen auswählt?
Ich habe einige proprietäre Gläser, die nicht in öffentliche Repos hochgeladen werden können.
Kann leiningen auch verwendet werden, um ein "lib" -Verzeichnis für Clojure-Projekte zu verwalten? Wenn einige meiner Clojure-Projekte dieselben Gläser verwenden, möchte ich nicht für jedes eine separate Kopie verwalten.
Vielen Dank
Antworten:
Sie könnten Ihre privaten Gläser hineinstellen
lib/
und sie würden für Zweckelein swank
und dergleichen auf dem Klassenpfad sein ; Dies scheint den Sinn der Verwendung eines Abhängigkeitsverwaltungstools zu zunichte zu machen. Wenn Sie jedoch nicht möchten, dass diese Abhängigkeiten verwaltet werden, können Sie Leiningen als "Open-Source-Abhängigkeitsverwaltungstool" behandeln und möglicherweise vorsichtig seinlein clean
.Wenn die Situation komplexer wird - es gibt eine größere Anzahl von privaten Gläsern, die sich weiterentwickeln und Sie müssen einige Versionsinformationen dazu berücksichtigen -, ist Arthurs Idee, ein privates Maven-Repo zu erstellen, möglicherweise angemessener.
(Die Personalabteilung kennzeichnet den Leiningen-spezifischen Teileschnittpunkt ... Weiter unten finden Sie Informationen zur allgemeinen Geschichte der Build- / Abhängigkeitsmanagement-Tools in Clojure Land, einschließlich einiger Links, die meiner Meinung nach in Ihrer Situation sehr nützlich sein könnten.)
Außerdem gibt es noch keine allgemeine Einigung darüber, welches das beste Build-Tool für Clojure ist, und Leiningen gewinnt zwar an Mindshare, gewinnt aber auch in den Bereichen Features und Politur ständig an - was insbesondere bedeutet es ist noch nicht vollständig. Hier ist ein Zitat von Stuart Halloway, dem Autor von Pragmatic Bookshelfs "Programming Clojure": "Mein 2c: Leiningen ist ein wichtiger Schritt, aber es gibt noch viel zu tun." Die vollständige Veröffentlichung und eine sehr interessante Diskussion zum Erstellen von Tools und Ähnlichem im Clojure-Bereich finden Sie in der Leiningen, Clojure und Bibliotheken: Was fehlt mir?Thread auf der Clojure Google-Gruppe. Viele Teilnehmer erwähnen ausdrücklich die Notwendigkeit lokaler Abhängigkeiten, die weder lokal noch anderweitig in Repositorys enthalten sind, und erläutern die Lösungen, die sie für solche Szenarien entwickelt haben. Vielleicht könnten Sie sehen, ob es dort drüben etwas gibt, das Ihr Problem jetzt / in Zukunft lösen kann, wenn die Funktionssätze ausgereift sind?
Auf jeden Fall ist es möglich, dass Leiningen für einige komplexe Szenarien noch keine gute Geschichte parat hat. Wenn Sie der Meinung sind, dass dies für Ihren Fall zutrifft (und ich meine, nachdem Sie die Idee eines privaten Repos in Betracht gezogen haben), finden Sie hier einige Links zu Maven-basierten Alternativen aus dem oben genannten Thread: Polyglot Maven , Clojure-Maven-Plugin ; dieser Blogeintragzielt darauf ab, für Leute nützlich zu sein, die versuchen, Maven mit Clojure zu verwenden. Soweit ich mich erinnere, verwendet Meikel Brandmeyer (ebenfalls auf SO unter seinem Online-Handle von Kotarak) Gradle (ein Groovy-Build-System) mit einem Plugin, um Clojure namens Clojuresque unterzubringen. Ich habe es nie selbst versucht, da ich nicht das erste über Groovy weiß, aber er behauptet, damit einen sehr schönen Bau-Act zu machen, und ich glaube, es hat nichts mit Maven zu tun - etwas, das an und für sich ein Plus ist für einige von uns. :-)
quelle
Verwenden Sie einfach : Ressourcenpfade in Ihrer Datei project.clj. Ich benutze es zB, um eine Verbindung zu Siebel-Servern herzustellen. Ich habe gerade ein Ressourcenverzeichnis in meinem Projektverzeichnis erstellt und die JAR-Dateien dort kopiert. Aber natürlich könnten Sie ein allgemeineres Verzeichnis verwenden:
Dann kann ich aus der lein repl Siebel Data Bean-Instanzen erstellen, z
Wenn Sie eine neuere Java-Version haben, können Sie in Ihrer Pfadspezifikation natürlich Platzhalter wie diese für ein allgemeineres Verzeichnis verwenden:
quelle
Erstellen Sie ein Verzeichnis im Projekt:
mkdir maven_repository
Fügen Sie diesem Repository lokale Gläser hinzu:
Mit diesem Befehl wird die
jaad-0.8.3.jar
Datei beispielsweise zum Maven-Repository hinzugefügt:mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository
Fügen Sie Folgendes hinzu:
project.clj
:repositories {"local" "file:maven_repository"}
Jetzt sollte ein Stammgast
lein deps
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
Die Warnung kann ignoriert werden, da das Glas in das Projekt eingecheckt und nicht aus dem Internet heruntergeladen wird.
Originalquelle: Verwendung lokaler JARs mit Leiningen (seit dem Kopieren geändert)
quelle
Ich finde,
lein pom; lein jar; lein install
funktioniert gut bei der Entwicklung von Bibliotheken.Tun Sie dies in der Bibliothek, die gerade entwickelt wird, und Ihre Anwendung, die dies erfordert, wird es ohne
:repositories
Foo verwenden.Alternativ
lein do pom, jar, install
ist etwas prägnanter.Dies ermöglicht das Aufrufen der Bibliothek wie jedes andere
:dependencies [[project-name "version"]]
quelle
:dependencies [[project-name "version"]]
lein install
. Es wird das Glas und den Bommel für Sie bauen.Ich glaube, der "richtige" Ansatz besteht darin , ein privates Maven-Repository zu erstellen, damit Sie die Gläser an einem einzigen Ort aufbewahren können und alle Ihre Filialen usw. die Änderungen übernehmen. Dies kann für das, was Sie tun, übertrieben sein. Ich bin gespannt, ob dies ein einfacher Weg ist.
quelle
Sie können das Plugin verwenden
lein-localrepo
: https://github.com/kumarshantanu/lein-localrepoquelle
Eine aktuelle Entwicklung ist Phils
s3-wagon-private
Plugin für Leiningen: https://github.com/technomancy/s3-wagon-privateDies sollte es Ihnen ermöglichen, Artefakte in einem privaten Remote-Repo zu veröffentlichen.
quelle
Keine dieser Lösungen hat mir geholfen. Stattdessen habe ich ein lokales Repository installiert und maven verwendet, um die JAR-Datei im lokalen Repo zu installieren, und das lokale Repo zu meiner project.clj hinzugefügt
In der Kommandozeile:
Und ich schreibe meine project.clj so:
Ich hoffe es hilft.
[REFERENZ: https://gist.github.com/stuartsierra/3062743 ]
quelle
Vielleicht werfen Sie einen Blick auf diese vorherige Antwort . Ich gebe Schritt für Schritt Anweisungen zum Einrichten eines lokalen Repositorys für das Projekt (Zugriff über
file://
), in dem Sie Ihre Jars installieren können.quelle
Probieren Sie meine Lösung aus, wie Sie eine JAR-Datei mit Abhängigkeiten erstellen. Http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html
quelle
Die beste Option ist, eine private JFrog / Nexus-Artifactory einzurichten und Ihre Snapshots / Releases dort bereitzustellen und diese Artifiactory dann als Repositorys in Ihrer project.clj hinzuzufügen
Andere einfachere Wege sind
Statisches HTTP Die einfachste Art von privatem Repository ist ein Webserver, der auf ein Verzeichnis voller statischer Dateien verweist. Sie können eine file: /// URL in Ihren: Repositorys verwenden, um auf diese Weise bereitzustellen, wenn das Verzeichnis lokal für den Computer ist, auf dem Leiningen ausgeführt wird.
SCP Wenn Sie bereits einen Server mit Ihren öffentlichen SSH-Schlüsseln eingerichtet haben, ist der scp-Transport eine einfache Möglichkeit, private Abhängigkeiten zu veröffentlichen und zu nutzen. Platzieren Sie das folgende Innenprojekt:
Platzieren Sie dann Folgendes außerhalb des Defrojekts:
Es ist auch möglich, mithilfe des scp-Transports in einem Repository bereitzustellen und von dort über http zu konsumieren, wenn Sie nginx oder ähnliches einrichten, um das Repository-Verzeichnis über HTTP bereitzustellen.
NB SCP-Bereitstellungen in Clojars werden nicht mehr unterstützt
Die Originalquelle ist hier https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md
quelle