java jstl net - leiningen - comment ajouter des dépendances pour les jars locaux?




6 Answers

Vous pourriez mettre vos bocaux privés dans lib/ et ils seraient sur le classpath dans le but de lein swank et autres; Cela semble aller à l'encontre de l'utilisation d'un outil de gestion des dépendances, mais si vous ne voulez pas que ces dépendances soient gérées, vous pouvez considérer Leiningen comme un «outil de gestion des dépendances open source».

Comme 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 quelques informations sur les versions - l'idée d'Arthur de créer un dépôt privé Maven peut être plus appropriée.

(Le HR signifie le point de coupure spécifique à Leiningen ... Continuez ci-dessous pour plus d'informations sur l'histoire générale de l'outillage de gestion de construction / dépendance dans le pays de Clojure, y compris quelques liens qui pourraient être très utiles dans votre situation.)

Aussi, 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 esprit, gagne aussi constamment dans les domaines caractéristiques et polonais - ce qui signifie notamment ce n'est pas encore complet. Voici une citation de Stuart Halloway, auteur de "Programming Clojure" de Pragmatic Bookshelf: "Mon 2c: Leiningen est une étape importante, mais il reste encore beaucoup à faire." Pour l'article complet et une discussion très intéressante sur les outils de construction et autres dans l'espace de Clojure, voir le Leiningen, Clojure et les bibliothèques: qu'est-ce qui me manque? fil sur le groupe Google Clojure. De nombreux participants mentionnent spécifiquement la nécessité d'avoir des dépendances locales non contenues dans des référentiels, locaux ou autres, et élaborent les solutions qu'ils ont trouvé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, quand 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 des 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 thread mentionné ci-dessus: polyglot clojure-maven-plugin , clojure-maven-plugin ; ce blog a pour but d'être utile aux personnes essayant d'utiliser maven avec Clojure. Si je me souviens, Meikel Brandmeyer (également sur SO sous sa poignée 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 connais pas la première chose de Groovy, mais il prétend faire un très bel acte de construction et je crois que ça n'a rien à voir avec maven - quelque chose qui est un plus en soi pour certains d'entre nous. :-)

Je veux utiliser leiningen pour construire et développer mon projet clojure. Y at-il un moyen de modifier project.clj pour lui dire de choisir des jars à partir de répertoires locaux?

J'ai des bocaux propriétaires qui ne peuvent pas être téléchargés dans les dépôts publics.

En outre, peut-on utiliser le leiningen pour maintenir un répertoire "lib" pour les projets clojure? Si une poignée de mes projets de clojure partagent les mêmes bocaux, je ne veux pas en conserver une copie distincte pour chacun d'entre eux.

Merci




  1. Créez un répertoire dans le projet:

    mkdir maven_repository

  2. Ajoutez des fichiers JAR locaux à ce référentiel:

    Par exemple, cette commande ajoute le fichier jaad-0.8.3.jar 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

  3. Ajoutez ce qui suit à project.clj

    :repositories {"local" "file:maven_repository"}

  4. Maintenant, un régulier 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é, puisque le pot sera vérifié dans le projet et non téléchargé sur Internet.

Source originale: Utilisation des JAR locaux avec Leiningen (changé depuis la copie)




Je crois que l'approche «correcte» consiste à créer un référentiel Maven privé afin que vous puissiez stocker les bocaux dans un seul endroit et que toutes vos branches, etc., prennent 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 facile.




Un développement récent est le plugin s3-wagon-private Phil pour Leiningen: https://github.com/technomancy/s3-wagon-private

Cela devrait vous permettre de publier des artefacts dans un dépôt distant privé.




Aucune de ces solutions m'a travaillé. Au lieu de cela, j'ai installé un dépôt local, et utilisé maven pour installer le fichier jar dans le repo local, et ajouté le repo local à mon projet.clj

En ligne de commande:

mvn deploy:deploy-file -DgroupId=local -DartifactId=bar \
    -Dversion=1.0.0 -Dpackaging=jar -Dfile=bar.jar \
    -Durl=file:repo

Et j'écris mon project.clj comme ceci:

(defproject foo "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [local/bar "1.0.0"]]
  :repositories {"project" "file:repo"})

J'espère que cela aide.

[REFERENCE: gist.github.com/stuartsierra/3062743 ]




La meilleure option est de configurer un artefact JFrog / Nexus privé et de déployer vos snapshots / releases là-bas, puis d'ajouter cet artifiactory comme dépôt dans votre projet.

D'autres moyens plus simples sont

HTTP statique Le type de référentiel privé le plus simple est un serveur Web pointé sur un répertoire contenant des fichiers statiques. Vous pouvez utiliser une URL file: /// dans vos: dépôts pour déployer de cette manière si le répertoire est local sur la machine sur laquelle Leiningen est en cours d'exécution.

SCP Si vous avez déjà un serveur configuré avec vos clés publiques SSH, le transport scp est un moyen simple de publier et de consommer des dépendances privées. Placez le defproject à l'intérieur suivant:

:plugins [[org.apache.maven.wagon/wagon-ssh-external "2.6"]]
:repositories [["releases" "scp://somerepo.com/home/repo/"]]

Ensuite, placez ce qui suit en dehors du defproject:

(cemerick.pomegranate.aether/register-wagon-factory!
 "scp" #(let [c (resolve 'org.apache.maven.wagon.providers.ssh.external.ScpExternalWagon)]
          (clojure.lang.Reflector/invokeConstructor c (into-array []))))

Il est également possible de déployer dans un référentiel en utilisant le transport scp et de le consommer 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 SCP à Clojars ne sont plus supportés

La source originale est ici https://github.com/technomancy/leiningen/blob/stable/doc/DEPLOY.md




Related