Je souhaite utiliser leiningen pour construire et développer mon projet clojure. Existe-t-il un moyen de modifier project.clj pour lui dire de choisir des fichiers JAR dans les répertoires locaux?
J'ai des fichiers JAR propriétaires qui ne peuvent pas être téléchargés vers des dépôts publics.
Aussi, peut-on utiliser leiningen pour maintenir un répertoire "lib" pour les projets clojure? Si plusieurs de mes projets clojure partagent les mêmes pots, je ne veux pas conserver une copie séparée pour chacun d'eux.
Merci
Réponses:
Vous pourriez mettre vos pots privés
lib/
et ils seraient sur le chemin de classe pour les besoinslein swank
et autres; cela semble aller à l'encontre de l'intérêt d'utiliser un outil de gestion des dépendances, bien que si vous ne voulez pas vraiment que ces dépendances soient gérées, vous pouvez traiter Leiningen comme un "outil de gestion des dépendances open source" et peut-être faire attention aveclein clean
.Au fur et à mesure que la situation devient plus complexe - il y a un plus grand nombre de jars privés impliqués, ils évoluent et vous devez prendre en compte certaines informations de contrôle de version - l'idée d'Arthur de créer un dépôt Maven privé peut être plus appropriée.
(Le HR signifie le point de coupure de la pièce spécifique à Leiningen ... Continuez ci-dessous pour obtenir des informations sur l'histoire générale de l'outillage de gestion de construction / dépendance dans Clojure land, y compris certains liens qui, je pense, pourraient être très utiles dans votre situation.)
De plus, pour l'instant, il n'y a pas d'accord universel sur la question de savoir quel est le meilleur outil de construction pour Clojure, et Leiningen, tout en gagnant en conscience, gagne également constamment dans les domaines des caractéristiques et du polissage - ce qui signifie, en particulier, que ce n'est pas encore terminé. Voici une citation de Stuart Halloway, l'auteur de "Programming Clojure" de Pragmatic Bookshelf: "Mon 2c: Leiningen est une étape importante, mais il reste encore beaucoup à faire." Pour la publication complète et une discussion très intéressante sur les outils de construction et autres dans l'espace Clojure, voir Leiningen, Clojure et les bibliothèques: que me manque-t-il?fil sur le groupe Google Clojure. De nombreux participants mentionnent spécifiquement la nécessité d'avoir des dépendances locales qui ne sont contenues dans aucun référentiel, local ou autre, et élaborent sur les solutions qu'ils ont proposées pour de tels scénarios. Peut-être pourriez-vous voir s'il y a quelque chose là-bas qui peut résoudre votre problème maintenant / pourrait le résoudre à l'avenir, lorsque les ensembles de fonctionnalités arriveront à maturité?
Quoi qu'il en soit, il est possible que Leiningen n'ait pas encore une bonne histoire prête pour certains scénarios complexes. Si vous pensez que cela peut être vrai dans votre cas (et je veux dire après avoir considéré l'idée du repo privé), voici quelques liens vers des alternatives basées sur maven tirées du fil mentionné ci-dessus: polyglot maven , clojure-maven-plugin ; cet article de blogvise à être utile aux personnes essayant d'utiliser maven avec Clojure. Si je me souviens bien, Meikel Brandmeyer (également sur SO sous son pseudo en ligne de kotarak) utilise Gradle (un système de construction Groovy) avec un plugin pour accueillir Clojure appelé Clojuresque; Je ne l'ai jamais essayé moi-même, car je ne sais pas la première chose à propos de Groovy, mais il prétend diriger un très bel acte de construction avec et je pense que cela n'a rien à voir avec maven - quelque chose qui est un plus en soi pour certains d'entre nous. :-)
la source
Utilisez simplement : resource-path dans votre fichier project.clj. Je l'utilise, par exemple pour me connecter aux serveurs Siebel. Je viens de créer un répertoire de ressources dans mon répertoire de projet et d'y copier les fichiers jar. Mais bien sûr, vous pouvez utiliser un répertoire plus générique:
Ensuite, à partir du lein repl, je peux créer des instances Siebel Data Bean, par exemple
Si vous avez une version plus récente de Java, vous pouvez bien sûr utiliser des caractères génériques dans votre spécification de chemin comme ceci pour un répertoire plus général:
la source
Créez un répertoire dans le projet:
mkdir maven_repository
Ajoutez des fichiers JAR locaux à ce référentiel:
Par exemple, cette commande ajoute le
jaad-0.8.3.jar
fichier au référentiel 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
Ajoutez ce qui suit à
project.clj
:repositories {"local" "file:maven_repository"}
Maintenant, un habitué
lein deps
devrait fonctionner:$ 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
L'avertissement peut être ignoré, car le fichier jar sera archivé dans le projet et non téléchargé depuis Internet.
Source originale: Utilisation de JAR locaux avec Leiningen (modifié depuis la copie)
la source
Je trouve que cela
lein pom; lein jar; lein install
fonctionne bien lors du développement de bibliothèques.Faites cela dans la bibliothèque en cours de développement et votre application qui en a besoin l'utilisera sans
:repositories
foo requis.Alternativement,
lein do pom, jar, install
est légèrement plus concis.Cela permet d'appeler la bibliothèque comme n'importe quelle autre
:dependencies [[project-name "version"]]
la source
:dependencies [[project-name "version"]]
lein install
. Il construira le pot et le pom pour vous.Je crois que l'approche "correcte" est de créer un référentiel Maven privé afin que vous puissiez stocker les fichiers JAR dans un seul emplacement et que toutes vos branches, etc., prendront en charge les modifications. Cela peut être exagéré pour ce que vous faites. Je suis curieux de savoir si c'est un moyen plus simple.
la source
Vous pouvez utiliser le plugin
lein-localrepo
: https://github.com/kumarshantanu/lein-localrepola source
Un développement récent est le
s3-wagon-private
plugin de Phil pour Leiningen: https://github.com/technomancy/s3-wagon-privateCela devrait vous permettre de publier des artefacts dans un référentiel distant privé.
la source
Aucune de ces solutions ne m'a fonctionné. Au lieu de cela, j'ai installé un référentiel local et utilisé maven pour installer le fichier jar dans le référentiel local, et ajouté le référentiel local à mon project.clj
En ligne de commande:
Et j'écris mon project.clj comme ceci:
J'espère que ça aide.
[RÉFÉRENCE: https://gist.github.com/stuartsierra/3062743 ]
la source
Jetez peut-être un œil à cette réponse précédente , je vous donne des instructions étape par étape pour configurer un référentiel local au projet (accessible via
file://
) dans lequel vous pouvez installer vos jars.la source
Essayez ma solution comment créer un fichier jar avec des dépendances http://middlesphere-1.blogspot.ru/2014/06/how-to-make-jar-with-dependencies-using.html
la source
La meilleure option consiste à configurer un artificiel JFrog / Nexus privé et à y déployer vos instantanés / versions, puis à ajouter cet artificiel en tant que référentiels dans votre projet.clj
D'autres moyens plus simples sont
HTTP statique Le type le plus simple de référentiel privé est un serveur Web pointé vers un répertoire rempli de fichiers statiques. Vous pouvez utiliser une URL file: /// dans vos: référentiels pour déployer de cette façon si le répertoire est local sur la machine sur laquelle Leiningen est en cours d'exécution.
SCP Si vous avez déjà configuré un serveur avec vos clés publiques SSH, le transport scp est un moyen simple de publier et de consommer des dépendances privées. Placez les éléments suivants à l'intérieur de defproject:
Placez ensuite les éléments suivants en dehors du defproject:
Il est également possible de déployer vers un référentiel en utilisant le transport scp et de consommer à partir de celui-ci via http si vous configurez nginx ou quelque chose de similaire pour servir le répertoire du référentiel via HTTP.
NB Les déploiements de SCP sur Clojars ne sont plus pris en charge
La source originale est ici https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md
la source