Chcę używać leiningen do tworzenia i rozwijania mojego projektu clojure. Czy istnieje sposób na zmodyfikowanie pliku project.clj, aby nakazał mu wybranie kilku plików JAR z lokalnych katalogów?
Mam kilka zastrzeżonych plików jar, których nie można przesłać do publicznych repozytoriów.
Czy można też używać leiningen do utrzymywania katalogu „lib” dla projektów clojure? Jeśli kilka moich projektów clojure korzysta z tych samych słoików, nie chcę utrzymywać osobnej kopii dla każdego z nich.
Dzięki
Odpowiedzi:
Mógłbyś włożyć swoje prywatne słoiki
lib/
i znalazłyby się na ścieżce klas do celówlein swank
i tym podobnych; wydaje się, że pokonuje to sens używania narzędzia do zarządzania zależnościami, ale jeśli nie chcesz, aby te zależności były zarządzane, możesz traktować Leiningen jako „narzędzie do zarządzania zależnościami open source” i być może ostrożnielein clean
.Gdy sytuacja staje się bardziej złożona - w grę wchodzi większa liczba prywatnych słoików, ewoluują i musisz wziąć pod uwagę pewne informacje dotyczące wersji - pomysł Arthura na utworzenie prywatnego repozytorium Mavena może być bardziej odpowiedni.
(HR oznacza punkt odcięcia części specyficzny dla Leiningen ... Kontynuuj poniżej, aby uzyskać informacje na temat ogólnej historii narzędzi do zarządzania budową / zależnościami w Clojure land, w tym niektóre linki, które, jak sądzę, mogą się bardzo przydać w twojej sytuacji.)
Na razie nie ma też powszechnej zgody co do tego, które narzędzie do budowania jest najlepsze dla Clojure, a Leiningen, zyskując w myślach, stale zyskuje również w obszarach cechy i polaryzację - co oznacza w szczególności, że nie jest jeszcze zakończona. Oto cytat Stuarta Hallowaya, autora książki Pragmatic Bookshelf's „Programming Clojure”: „My 2c: Leiningen to ważny krok, ale wciąż jest wiele do zrobienia”. Aby zapoznać się z pełnym postem i bardzo interesującą dyskusją dotyczącą narzędzi do budowania i tym podobnych w przestrzeni Clojure, zobacz Leiningen, Clojure i biblioteki: czego mi brakuje?wątek w grupie Clojure Google. Wielu uczestników wyraźnie wspomina o potrzebie posiadania lokalnych zależności, które nie są zawarte w żadnym repozytorium, lokalnym lub innym, i opracowuje rozwiązania, które wymyślili dla takich scenariuszy. Być może zobaczysz, czy jest tam coś, co może rozwiązać Twój problem teraz / może rozwiązać go w przyszłości, gdy zestawy funkcji dojrzeją?
W każdym razie jest możliwe, że Leiningen może nie mieć jeszcze dobrej historii na niektóre złożone scenariusze. Jeśli uważasz, że może to być prawda w Twoim przypadku (i mam na myśli po rozważeniu pomysłu prywatnego repo), oto kilka linków do alternatyw opartych na maven wziętych z wyżej wymienionego wątku: polyglot maven , clojure-maven-plugin ; ten wpis na bloguma być przydatny dla osób próbujących używać maven z Clojure. Jak sobie przypominam, Meikel Brandmeyer (również na SO pod jego internetowym uchwytem kotaraka) używa Gradle (systemu kompilacji Groovy) z wtyczką do obsługi Clojure o nazwie Clojuresque; Sam nigdy tego nie próbowałem, bo nie wiem nic o Groovym, ale twierdzi, że prowadzi z nim bardzo fajny akt budowlany i uważam, że nie ma to nic wspólnego z mavenem - coś, co jest plusem samym w sobie dla niektórych z nas. :-)
źródło
Po prostu użyj : ścieżki zasobów w pliku project.clj. Używam go np. Do łączenia się z serwerami Siebel. Właśnie utworzyłem katalog zasobów w katalogu mojego projektu i skopiowałem tam pliki jar. Ale oczywiście możesz użyć bardziej ogólnego katalogu:
Następnie z lein repl mogę tworzyć instancje Siebel Data Bean, np
Jeśli masz nowszą wersję Java, możesz oczywiście użyć symboli wieloznacznych w specyfikacji ścieżki, tak jak to jest w przypadku bardziej ogólnego katalogu:
źródło
Utwórz katalog w projekcie:
mkdir maven_repository
Dodaj lokalne pliki JAR do tego repozytorium:
Na przykład to polecenie dodaje
jaad-0.8.3.jar
plik do repozytorium maven:mvn deploy:deploy-file -Dfile=jaad-0.8.3.jar -DartifactId=jaad -Dversion=0.8.3 -DgroupId=jaad -Dpackaging=jar -Durl=file:maven_repository
Dodaj następujące elementy do
project.clj
:repositories {"local" "file:maven_repository"}
Teraz regularny
lein deps
powinien działać:$ 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
Ostrzeżenie można zignorować, ponieważ jar zostanie wpisany do projektu i nie zostanie pobrany z Internetu.
Oryginalne źródło: Korzystanie z lokalnych plików JAR z Leiningen (zmienione od czasu skopiowania)
źródło
znajduję
lein pom; lein jar; lein install
działa dobrze podczas tworzenia bibliotek.Zrób to w rozwijanej bibliotece, a aplikacja, która tego wymaga, będzie z niej korzystać bez żadnych
:repositories
foo.Ewentualnie
lein do pom, jar, install
jest nieco bardziej zwięzła.Pozwala to na wywołanie biblioteki jak każda inna
:dependencies [[project-name "version"]]
źródło
:dependencies [[project-name "version"]]
lein install
. Zbuduje dla Ciebie słoik i pom.Uważam, że „właściwym” podejściem jest utworzenie prywatnego repozytorium Maven, tak aby można było przechowywać słoiki w jednym miejscu, a wszystkie gałęzie itp. Przyjmowały zmiany. To może być przesada za to, co robisz. Ciekaw jestem, czy to łatwiejszy sposób.
źródło
Możesz skorzystać z wtyczki
lein-localrepo
: https://github.com/kumarshantanu/lein-localrepoźródło
Niedawnym osiągnięciem jest
s3-wagon-private
wtyczka Phila do Leiningen: https://github.com/technomancy/s3-wagon-privatePowinno to umożliwić publikowanie artefaktów w prywatnym, zdalnym repozytorium.
źródło
Żadne z tych rozwiązań nie zadziałało. Zamiast tego zainstalowałem lokalne repozytorium i użyłem maven do zainstalowania pliku jar w lokalnym repozytorium i dodałem lokalne repozytorium do mojego projektu.clj
W linii poleceń:
I piszę mój project.clj w ten sposób:
Mam nadzieję, że to pomoże.
[ODNIESIENIE: https://gist.github.com/stuartsierra/3062743 ]
źródło
Może rzuć okiem na tę poprzednią odpowiedź. Podaję instrukcje krok po kroku, aby skonfigurować repozytorium lokalne dla projektu (dostępne przez
file://
), w którym można zainstalować swoje słoiki.źródło
Wypróbuj moje rozwiązanie, jak zbudować plik jar z zależnościami http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html
źródło
Najlepszą opcją jest skonfigurowanie prywatnej artefaktury JFrog / Nexus i wdrożenie tam migawek / wersji, a następnie dodanie tego artefaktora jako repozytoriów w projekcie.clj
Inne prostsze sposoby to
Statyczny HTTP Najprostszym rodzajem prywatnego repozytorium jest serwer WWW wskazujący na katalog pełen plików statycznych. Możesz użyć pliku: /// URL w swoich: repozytoriach, aby wdrożyć w ten sposób, jeśli katalog jest lokalny na komputerze, na którym działa Leiningen.
SCP Jeśli masz już serwer skonfigurowany przy użyciu kluczy publicznych SSH, transport scp jest prostym sposobem publikowania i wykorzystywania prywatnych zależności. Umieść następujące elementy wewnątrz projektu:
Następnie umieść następujące elementy poza defprojektem:
Możliwe jest również wdrożenie do repozytorium przy użyciu transportu scp i korzystanie z niego przez http, jeśli skonfigurujesz nginx lub coś podobnego do obsługi katalogu repozytorium przez HTTP.
Wdrożenia NB SCP w Clojars nie są już obsługiwane
Oryginalne źródło jest tutaj https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md
źródło