2013-02-07 11 views
5

Wir arbeiten an einem Projekt mit Clojure-Java Interop. An dieser Stelle haben wir eine einzelne Klasse mit verschiedenen Abhängigkeiten, die wir zur Entwicklung in eine Benutzerbibliothek in Eclipse legen, aber das hilft natürlich nicht, wenn Sie Leiningen (2.x) verwenden. Die meisten unserer Abhängigkeiten sind proprietär, also befinden sie sich nicht irgendwo in einem Repository.Wie konfigurieren Sie proprietäre Abhängigkeiten für Leiningen?

Was ist der einfachste/richtige Weg, dies zu tun?

Ich habe leiningen - how to add dependencies for local jars? gesehen, aber es scheint veraltet zu sein?

Update: Also machte ich eine lokale Maven-Repository für mein Glas folgende these instructions und the lein deployment docs on github und bearbeiten meine project.clj-Datei wie folgt:

:dependencies [[...] 
       [usc "0.1.0"]] 
:repositories {"usc" "file://maven_repository"} 

Wo maven_repository unter dem Projektverzeichnis ist (also nicht mit file:///). Als ich „lein deps“ ran - habe ich diese Meldung:

Retrieving usc/usc/0.1.0/usc-0.1.0.pom from usc 
Could not transfer artifact usc:usc:pom:0.1.0 from/to usc (file://maven_repository): no supported algorithms found 
This could be due to a typo in :dependencies or network issues. 
Could not resolve dependencies 

Was durch „keine unterstützten Algorithmen gefunden“ zu verstehen ist und wie kann ich es beheben?

Update2: Gefunden das letzte Bit der Antwort here.

Antwort

1

fügen Sie sie als eine Abhängigkeit zu Ihrem Leiningen-Projekt hinzu. Sie können die Namen und Versionen erstellen. dann laufen lein deps und die Fehlermeldung, wenn es nicht finden kann, gibt Ihnen den genauen Befehl zu laufen, so können Sie das Glas zu Ihrem lokalen Repo installieren dann würden Sie entscheiden, eine gemeinsame Repo zu verwenden, können Sie den gleichen Prozess verwenden um deine Abhängigkeiten dorthin zu bringen.

0

YMMV aber ich habe es am besten gefunden, Maven statt Leiningen zu verwenden, wenn Sie mit Polyglot Clojure/Java-Projekten arbeiten.

Das liegt hauptsächlich daran, dass die Java-basierten Tools (Eclipse etc.) Maven-Projekte verstehen, Leiningen-Projekte aber nicht wirklich verstehen. Es wird langsam besser mit dem exzellenten Counterclockwise Clojure-Plugin, aber die Integration ist immer noch nicht gut genug für einen effizienten IDE-basierten Workflow.

Auf der Repository-Seite der Dinge würde ich vorschlagen, ein privates freigegebenes Maven-Repository einzurichten. Sie werden es früher oder später brauchen, wenn Sie eine komplexe Reihe von Abhängigkeiten in Ihrem Team verwalten wollen: Sie könnten genauso gut in den sauren Apfel beißen und es jetzt erledigen.

1

@ Arthurs Antwort ist gut, aber ich dachte, ich würde es ein wenig mehr ausarbeiten, da es einige Details fehlen lässt.

  1. Denken Sie immer daran, Repeatability. Wenn Sie es nicht so einrichten, dass jeder, der Zugriff auf die Artefakte benötigt, auf die Standardartefakte zugreifen kann, bitten Sie um Unterstützung.

  2. Die documentation on deployment ist ein guter Ort, um alles über die Bereitstellung Ihrer Artefakte zu erfahren. Da Sie sich in einer mehrsprachigen Umgebung befinden, können Sie wahrscheinlich nicht lein für die Bereitstellung all Ihrer Artefakte sorgen, aber zumindest können Sie Ihre clojure-spezifischen Jars in S3 oder sogar eine Datei freigeben, wenn Sie möchten. Der Rest Ihrer Artefakte muss Maven oder Ant direkt verwenden, um die Artefakte in das Maven Repo auf dem Dateiserver oder S3 hochzuladen.Bei meiner jetzigen Firma verwenden wir Technomancys exzellentes s3 wagon private mit großer Wirkung für das Hosting unserer Closed-Source-Artefakte und clojars für das Hosting von allem, was wir Open-Source können.

  3. Worauf sich @Arthur bezieht, ist eine lein install. Es wird lediglich eine Kopie des aktuellen Projekts in Ihrem lokalen Verzeichnis .m2 installiert, damit andere Projekte auf Ihrer Box auf sie verweisen können. Wenn Sie Ihre Installation von maven nicht so konfiguriert haben, dass sie ein freigegebenes Verzeichnis für Ihren Ordner .m2 verwenden (möglicherweise keine schlechte Idee in Ihrer Umgebung?), Wird dies für alle anderen, die Ihr Projekt auschecken, nicht möglich sein.. Wenn Sie diese Route verwenden möchten, müssen Sie den Knoten localRepository in Ihrer $M2_HOME/conf/settings.xml als freigegebenen Speicherort festlegen, auf den der Rest Ihres Teams zugreifen kann. Weitere Informationen finden Sie unter the docs.