Saya ingin menggunakan leiningen untuk membangun dan mengembangkan proyek clojure saya. Apakah ada cara untuk memodifikasi project.clj untuk memintanya mengambil beberapa toples dari direktori lokal?
Saya memiliki beberapa botol berpemilik yang tidak dapat diunggah ke repositori publik.
Selain itu, dapatkah leiningen digunakan untuk memelihara direktori "lib" untuk proyek clojure? Jika sekelompok proyek clojure saya berbagi stoples yang sama, saya tidak ingin menyimpan salinan terpisah untuk masing-masing.
Terima kasih
Jawaban:
Anda bisa memasukkan stoples pribadi Anda
lib/
dan mereka akan berada di jalur kelas untuk tujuanlein swank
dan sejenisnya; ini tampaknya mengalahkan tujuan penggunaan alat manajemen ketergantungan, meskipun jika Anda tidak benar - benar ingin ketergantungan tersebut dikelola, Anda dapat memperlakukan Leiningen sebagai "alat manajemen ketergantungan sumber terbuka" dan mungkin berhati-hatilahlein clean
.Ketika situasinya menjadi lebih kompleks - ada lebih banyak botol pribadi yang terlibat, mereka berkembang dan Anda perlu mempertimbangkan beberapa info pembuatan versi pada mereka - ide Arthur untuk membuat repo Maven pribadi mungkin lebih tepat.
(HR menandakan titik cut-off bagian khusus Leiningen ... Lanjutkan di bawah untuk informasi tentang cerita perkakas manajemen build / dependensi umum di negeri Clojure, termasuk beberapa tautan yang menurut saya bisa sangat berguna dalam situasi Anda.)
Selain itu, hingga saat ini, belum ada kesepakatan universal tentang pertanyaan mana yang merupakan alat build terbaik untuk Clojure, dan Leiningen, sembari mendapatkan dalam mindshare, juga terus-menerus mendapatkan fitur dan pemolesan area - artinya, khususnya, bahwa itu belum lengkap. Berikut kutipan dari Stuart Halloway, penulis "Programming Clojure" Pragmatic Bookshelf: "2c saya: Leiningen adalah langkah penting, tetapi masih banyak yang harus dilakukan." Untuk posting lengkap dan diskusi yang sangat menarik tentang: membangun alat dan sejenisnya di ruang Clojure, lihat Leiningen, Clojure dan perpustakaan: apa yang saya lewatkan?utas di grup Google Clojure. Banyak peserta secara khusus menyebutkan perlunya memiliki dependensi lokal yang tidak terdapat dalam repositori apa pun, lokal atau lainnya, dan menguraikan solusi yang mereka buat untuk skenario semacam itu. Mungkin Anda dapat melihat apakah ada sesuatu di sana yang dapat menyelesaikan masalah Anda sekarang / mungkin menyelesaikannya di masa mendatang, ketika fitur sudah matang?
Bagaimanapun, ada kemungkinan bahwa Leiningen sebenarnya belum memiliki cerita yang bagus untuk beberapa skenario yang rumit. Jika Anda merasa ini mungkin benar untuk kasus Anda (dan maksud saya setelah Anda mempertimbangkan ide repo pribadi), berikut adalah beberapa tautan ke alternatif berbasis maven yang diambil dari utas yang disebutkan di atas: polyglot maven , clojure-maven-plugin ; posting blog inibertujuan untuk berguna bagi orang yang mencoba menggunakan maven dengan Clojure. Seingat saya, Meikel Brandmeyer (juga di SO di bawah pegangan online kotarak) menggunakan Gradle (sistem build Groovy) dengan plugin untuk mengakomodasi Clojure yang disebut Clojuresque; Saya tidak pernah mencobanya sendiri, karena tidak tahu apa-apa tentang Groovy, tetapi dia mengklaim menjalankan tindakan bangunan yang sangat bagus dengannya dan saya yakin itu tidak ada hubungannya dengan maven - sesuatu yang merupakan nilai tambah dalam dan dari dirinya sendiri untuk sebagian dari kita. :-)
sumber
Cukup gunakan : resource-paths di file project.clj Anda. Saya menggunakannya, misalnya untuk menyambung ke server Siebel. Baru saja membuat direktori sumber daya di direktori proyek saya dan menyalin file jar di sana. Tetapi tentu saja Anda dapat menggunakan direktori yang lebih umum:
Kemudian dari lein repl saya dapat membuat instance Siebel Data Bean, misalnya
Jika Anda memiliki versi Java yang lebih baru, tentu saja Anda dapat menggunakan karakter pengganti dalam spesifikasi jalur Anda seperti ini untuk direktori yang lebih umum:
sumber
Buat direktori dalam proyek:
mkdir maven_repository
Tambahkan stoples lokal ke repositori ini:
Misalnya, perintah ini menambahkan
jaad-0.8.3.jar
file ke repositori 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
Tambahkan yang berikut ini ke
project.clj
:repositories {"local" "file:maven_repository"}
Sekarang biasa
lein deps
harus bekerja:$ 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
Peringatan tersebut dapat diabaikan, karena jar akan diperiksa ke dalam proyek dan tidak diunduh dari internet.
Sumber asli: Menggunakan JAR lokal dengan Leiningen (diubah sejak penyalinan)
sumber
Saya menemukan
lein pom; lein jar; lein install
bekerja dengan baik saat mengembangkan perpustakaan.Lakukan ini di pustaka yang sedang dikembangkan dan aplikasi Anda yang memerlukannya akan menggunakannya tanpa
:repositories
memerlukan foo apa pun .Atau,
lein do pom, jar, install
sedikit lebih ringkas.Ini memungkinkan pemanggilan perpustakaan seperti yang lain
:dependencies [[project-name "version"]]
sumber
:dependencies [[project-name "version"]]
lein install
. Ini akan membuat toples dan pom untuk Anda.Saya yakin pendekatan yang "benar" adalah membuat Repositori Maven pribadi sehingga Anda dapat menyimpan toples di satu lokasi dan semua cabang Anda, dll. Akan menerima perubahannya. Ini mungkin berlebihan untuk apa yang Anda lakukan. Saya ingin tahu apakah ini cara yang lebih mudah.
sumber
Anda mungkin ingin menggunakan plugin
lein-localrepo
: https://github.com/kumarshantanu/lein-localreposumber
Perkembangan terbaru adalah
s3-wagon-private
plugin Phil untuk Leiningen: https://github.com/technomancy/s3-wagon-privateIni memungkinkan Anda untuk mempublikasikan artefak ke repo jarak jauh pribadi.
sumber
Tak satu pun dari solusi ini berhasil bagi saya. Sebagai gantinya saya telah menginstal repositori lokal, dan menggunakan maven untuk menginstal file jar di repo lokal, dan menambahkan repo lokal ke project saya.clj
Di baris perintah:
Dan saya menulis project.clj saya seperti ini:
Semoga membantu.
[REFERENSI: https://gist.github.com/stuartsierra/3062743 ]
sumber
Mungkin melihat jawaban sebelumnya ini , saya memberikan petunjuk langkah demi langkah untuk menyiapkan repositori lokal ke proyek (diakses melalui
file://
) di mana Anda dapat menginstal jars Anda.sumber
Coba solusi saya cara membuat file jar dengan dependensi http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html
sumber
Pilihan terbaik adalah mengatur artifactory JFrog / Nexus pribadi dan menerapkan snapshot / rilis Anda di sana dan kemudian menambahkan artifiactory itu sebagai repositori di project Anda.clj
Cara lain yang lebih sederhana adalah
HTTP Statis Jenis repositori pribadi yang paling sederhana adalah server web yang diarahkan ke direktori yang penuh dengan file statis. Anda dapat menggunakan file: /// URL di: repositories Anda untuk menerapkan cara tersebut jika direktori tersebut bersifat lokal ke mesin tempat Leiningen dijalankan.
SCP Jika Anda sudah menyiapkan server dengan kunci publik SSH Anda, transpor scp adalah cara sederhana untuk menerbitkan dan menggunakan dependensi privat. Tempatkan defproject dalam berikut ini:
Kemudian tempatkan berikut ini di luar defproject:
Anda juga dapat menerapkan ke repositori menggunakan transport scp dan menggunakannya melalui http jika Anda menyiapkan nginx atau yang serupa untuk menyajikan direktori repositori melalui HTTP.
Penerapan NB SCP ke Clojars tidak lagi didukung
Sumber aslinya ada di sini https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md
sumber