Question

Je veux utiliser Leiningen pour construire et développer mon projet clojure. Est-il possible de modifier project.clj pour lui dire de prendre des pots de répertoires locaux?

J'ai quelques pots propriétaires qui ne peuvent pas être téléchargés aux mises en pension publique.

En outre, peut Leiningen être utilisé pour maintenir un répertoire « lib » pour les projets de Clojure? Si un groupe de mes projets Clojure partagent les mêmes pots, je ne veux pas conserver une copie distincte pour chacun d'eux.

Merci

Était-ce utile?

La solution

Vous pouvez mettre vos pots privés dans lib/ et ils seraient sur le chemin de classe aux fins de lein swank et similaires; cela ne semble vaincre le point d'utiliser un outil de gestion de la dépendance, mais si vous ne le faites pas réellement voulez ces dépendances gérées, vous pouvez traiter Leiningen comme un « outil de gestion des dépendances open source » et peut-être faire attention avec lein clean.

Alors que la situation devient plus complexe - il y a un plus grand nombre de pots privés impliqués, ils évoluent et vous avez besoin de prendre quelques informations de versioning leur compte -. L'idée d'Arthur de créer un repo Maven privé peut être plus approprié


(Le HR signifie point de coupure de partie spécifique Leiningen ... Continuer ci-dessous pour plus d'informations sur la gestion de construction générale / dépendance histoire d'outillage dans la terre Clojure, y compris des liens que je pense pourrait être très utile dans votre situation.)

En outre, pour l'instant, il n'y a pas d'accord universel sur la question qui est le meilleur outil de construction pour Clojure, et Leiningen, tout en gagnant en Mindshare, est également gagner en permanence dans les caractéristiques des zones et polonais - ce qui signifie, en notamment, que ce n'est pas encore terminée. Voici une citation de Stuart Halloway, l'auteur de la « programmation Clojure » de Pragmatic Bookshelf: « Mon 2c: Leiningen est une étape importante, mais il y a encore beaucoup à faire. » Pour l'affichage complet et une discussion très intéressante re: construire des outils et autres dans l'espace Clojure, voir le Leiningen, Clojure et bibliothèques: ce que je suis absent fil sur le groupe Google Clojure?. De nombreux participants mentionnent spécifiquement la nécessité d'avoir des dépendances locales ne figurent pas dans les dépôts, locaux ou non, et d'élaborer les solutions qu'ils ont viennent avec de tels scénarios. Peut-être que vous pourriez voir s'il y a quelque chose là-bas qui peut résoudre votre problème maintenant / pourrait le résoudre à l'avenir, à maturité caractéristique des jeux?

De toute façon, il est possible que Leiningen ne peut en effet avoir une bonne histoire encore prête pour certains scénarios complexes. Si vous pensez que cela peut être vrai de votre cas (et je veux dire après que vous considérez comme l'idée de prise en pension privée), voici quelques liens vers des alternatives basées Maven prises à partir du fil mentionné ci-dessus: polyglotte maven , clojure-maven-plugin ; ce blog annonce a pour but d'être utile pour les personnes qui tentent d'utiliser maven avec Clojure. Si je me souviens, Meikel Brandmeyer (également sur le 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 ai jamais essayé moi-même, comme je ne sais pas la première chose à propos de Groovy, mais il prétend exécuter un acte de construction très agréable avec elle et je crois que ça n'a rien à voir avec Maven - ce qui est un plus en lui-même pour certains d'entre nous. : -)

Autres conseils

Il suffit d'utiliser : les chemins de ressources dans votre fichier project.clj. Je l'utilise, par exemple se connecter aux serveurs Siebel. Il suffit de créer un ressources dans mon répertoire de projet et copié les fichiers jar là-dedans. Mais vous pouvez bien sûr utiliser un répertoire plus générique:

(defproject test-project "0.1.0-SNAPSHOT"
:description "Blah blah blah"
...
:resource-paths ["resources/Siebel.jar" "resources/SiebelJI_enu.jar"])

Ensuite, de la lein rempl Je peux créer des instances de données Siebel Bean, par exemple.

(def sbl (com.siebel.data.SiebelDataBean.))
(.login sbl "siebelServer" "user" "password")
...

Si vous avez une version plus récente de Java, vous pouvez utiliser des caractères génériques de cours dans votre cahier des charges de chemin comme celui-ci pour un répertoire plus général:

:resource-paths ["/tmp/SiebelJars/*"]
  1. Créez un répertoire dans le projet:

    mkdir maven_repository

  2. Ajoutez jarres locales à ce référentiel:

    Par exemple, cette commande ajoute le fichier jaad-0.8.3.jar à l'maven référentiel:

    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, une lein deps régulière 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 pot sera vérifiée dans le projet et non téléchargé sur Internet.

Source d'origine: L'utilisation JAR locale de avec Leiningen (changé depuis la copie)

Je trouve lein pom; lein jar; lein install fonctionne bien lors du développement des bibliothèques.

Pour ce faire, dans la bibliothèque en cours d'élaboration et l'application exigeant qu'elle utilisera sans aucune :repositories foo nécessaire.


Sinon, lein do pom, jar, install est légèrement plus concis.


Cela permet d'appeler la bibliothèque comme tout autre :dependencies [[project-name "version"]]

Je crois que l'approche « correcte » est créer un référentiel Maven privé de sorte que vous pouvez stocker les pots dans un seul endroit et toutes vos branches, etc ramassera les changements. Cela peut être exagéré pour ce que vous faites. Je suis curieux de savoir si ceux-ci est un moyen plus facile.

Vous pouvez aimer utiliser le plugin lein-localrepo: https://github.com/kumarshantanu/lein-localrepo

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

Cela devrait vous permettre de publier des artefacts à une prise en pension à distance privé.

Aucune de ces solutions me travaillait. Au lieu de cela, je l'ai installé un dépôt local et utilisé Maven pour installer le fichier jar dans le repo local, et a ajouté le repo local pour mon project.clj

Dans la 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 mes 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"})

it helps.

[RÉFÉRENCE: https://gist.github.com/stuartsierra/3062743 ]

Peut-être un coup d'oeil à ce réponse précédente , je donne des instructions étape par étape pour configurer un référentiel locale au projet (accessible par file://) dans lequel vous pouvez installer vos pots.

Essayez ma solution comment construire fichier jar avec dépendances http: // middlesphere-1 .blogspot.ru / 2014/06 / how-to-faire avec-jarre-dépendances-using.html

La meilleure option est d'installer un JFrog privé / Nexus Artifactory et y déployer vos photos / communiqués puis ajouter que artifiactory comme dépôts en vous project.clj

D'autres moyens plus simples sont

HTTP statique Le type le plus simple de référentiel privé est un serveur web pointé sur un répertoire complet des fichiers statiques. Vous pouvez utiliser un fichier: /// URL dans vos:. Dépôts de déployer cette façon si le répertoire est local à la machine sur laquelle tourne Leiningen

SCP Si vous disposez déjà d'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 l'intérieur defproject suivant:

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

Ensuite, placez les éléments suivants à l'extérieur 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 un dépôt en utilisant le transport scp et consomment de celui-ci sur http si vous configurez nginx ou quelque chose de similaire à servir le répertoire de dépôt sur HTTP.

N.B.. SCP déploie à Clojars ne sont plus pris en charge

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top