Domanda

Voglio usare leiningen per costruire e sviluppare il mio progetto clojure.C'è un modo per modificare project.clj per dirgli di scegliere alcuni jar dalle directory locali?

Ho alcuni jar proprietari che non possono essere caricati su repository pubblici.

Inoltre, leiningen può essere utilizzato per mantenere una directory "lib" per progetti clojure?Se molti dei miei progetti clojure condividono gli stessi barattoli, non voglio mantenere una copia separata per ciascuno di essi.

Grazie

È stato utile?

Soluzione

Potresti metterci i tuoi barattoli privati lib/ e sarebbero sul percorso di classe ai fini di lein swank e simili;questo sembra vanificare l'utilità di utilizzare uno strumento di gestione delle dipendenze, anche se in realtà non lo fai Volere gestite quelle dipendenze, potresti trattare Leiningen come uno "strumento di gestione delle dipendenze open source" e magari stare attento lein clean.

Man mano che la situazione diventa più complessa (è coinvolto un numero maggiore di jar privati, si evolvono ed è necessario tenere in considerazione alcune informazioni sulle versioni su di essi), l'idea di Arthur di creare un repository Maven privato potrebbe essere più appropriata.


(L'HR indica il punto di interruzione della parte specifica di Leiningen...Continua di seguito per informazioni sulla storia generale degli strumenti di creazione/gestione delle dipendenze in Clojure Land, inclusi alcuni collegamenti che penso potrebbero rivelarsi molto utili nella tua situazione.)

Inoltre, per ora, non esiste un accordo universale sulla questione di quale sia il miglior strumento di costruzione per Clojure, e Leiningen, pur guadagnando in condivisione mentale, sta anche guadagnando costantemente in termini di funzionalità e perfezionamento dell'area, il che significa, in particolare, che non è ancora completo.Ecco una citazione di Stuart Halloway, l'autore di "Programming Clojure" di Pragmatic Bookshelf:"Il mio 2c:Leiningen rappresenta un passo importante, ma c'è ancora molto da fare." Per il post completo e una discussione molto interessante:costruire strumenti e simili nello spazio Clojure, vedere il Leiningen, Clojure e biblioteche:cosa mi manca? discussione sul gruppo Clojure Google.Molti partecipanti menzionano specificamente la necessità di avere dipendenze locali non contenute in alcun repository, locale o meno, ed elaborano le soluzioni che hanno escogitato per tali scenari.Forse potresti vedere se c'è qualcosa laggiù che può risolvere il tuo problema ora/potrebbe risolverlo in futuro, quando le funzionalità matureranno?

Ad ogni modo, è possibile che Leiningen non abbia ancora una buona storia pronta per alcuni scenari complessi.Se ritieni che questo possa essere vero per il tuo caso (e intendo dopo aver considerato l'idea del repository privato), ecco alcuni collegamenti ad alternative basate su Maven prese dal thread sopra menzionato: esperto poliglotta, clojure-maven-plugin; questo post sul blog mira ad essere utile alle persone che cercano di utilizzare Maven con Clojure.Se ricordo bene, Meikel Brandmeyer (anche lui su SO sotto il suo pseudonimo online di kotarak) usa Gradle (un sistema di build Groovy) con un plugin per ospitare Clojure chiamato Clojuresque;Non l'ho mai provato di persona, perché non so niente di Groovy, ma lui sostiene di eseguire un atto di costruzione molto carino con esso e credo che non abbia nulla a che fare con Maven - qualcosa che è un vantaggio in sé e per sé per alcuni di noi.:-)

Altri suggerimenti

Basta usare : risorse percorsi nel file project.clj. L'uso, ad esempio per connettersi ai server Siebel. Appena creato un risorse di directory nella mia directory del progetto e copiati i file jar in là. Ma, naturalmente, è possibile utilizzare una directory più generico:

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

Poi dalla Lein repl Posso creare istanze Siebel dati Bean, per es.

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

Se si dispone di una versione più recente di Java Ovviamente si può utilizzare caratteri jolly nella specifica del percorso come questo per una directory più generale:

:resource-paths ["/tmp/SiebelJars/*"]
  1. Creare una directory nel progetto:

    mkdir maven_repository

  2. Aggiungi vasetti locali a questo repository:

    Per esempio, questo comando aggiunge il file jaad-0.8.3.jar per l'esperto repository:

    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. Aggiungere il seguente alla project.clj

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

  4. Ora un lein deps regolare dovrebbe funzionare:

    $ 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'avviso può essere ignorato, in quanto il vaso sarà controllata nel progetto e non scaricato da internet.

Fonte originale: Utilizzando JAR locale con Leiningen (cambiato da copia)

Trovo lein pom; lein jar; lein install funziona bene quando si sviluppano le biblioteche.

Fate questo in biblioteca in fase di sviluppo e l'applicazione che richiede lo utilizza senza alcuna foo :repositories richiesta.


In alternativa, lein do pom, jar, install è leggermente più concisa.


Questo consente di chiamare la biblioteca come qualsiasi altro :dependencies [[project-name "version"]]

Credo che l'approccio "corretto" è quello di creare un repository Maven privato in modo che è possibile memorizzare i vasetti in un unico luogo e tutti i tuoi rami, ecc sarà rendere effettive le modifiche. Questo può essere eccessivo per quello che stai facendo. Sono curioso di sapere se questi è un modo più semplice.

È possibile, come utilizzare il lein-localrepo plugin: https://github.com/kumarshantanu/lein-localrepo

Un recente sviluppo è plug s3-wagon-private di Phil per Leiningen: https://github.com/technomancy/ s3-wagon-privato

Ciò dovrebbe consentire di pubblicare gli artefatti ad un repo remoto privata.

Nessuna di queste soluzioni me ha funzionato. Invece ho installato un repository locale, e utilizzato Maven per installare il file jar nel repository locali, e ha aggiunto il repo locale per il mio project.clj

In linea di comando:

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

E scrivo i miei project.clj in questo modo:

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

Speranza che aiuta.

[RIFERIMENTO: https://gist.github.com/stuartsierra/3062743 ]

Forse dare un'occhiata a questo risposta precedente , fornisco le istruzioni passo passo per l'installazione di un repository locale al progetto (accessibile tramite file://), in cui è possibile installare i vostri vasetti.

L'opzione migliore è quella di impostare un privato Artifactory JFrog / Nexus e distribuire le istantanee / uscite là e poi aggiungere che artifiactory come repository in voi project.clj

Altri modi più semplici sono

HTTP statico Il tipo più semplice di repository privato è un web server indicò una cartella piena di file statici. È possibile utilizzare un file: /// URL nel tuo:. Repository di distribuire in questo modo se la directory è locale per la macchina su cui è in esecuzione Leiningen

SCP Se si dispone già di un server configurato con le vostre chiavi pubbliche SSH, il trasporto SCP è un modo semplice per pubblicare e consumare dipendenze private. Inserire il seguente defproject interna:

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

Quindi inserire il seguente al di fuori del 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 []))))

E 'anche possibile distribuire a un repository utilizzando il trasporto SCP e consumare da esso su HTTP se si imposta nginx o qualcosa di simile per servire la directory repository su HTTP.

NB. SCP distribuisce a Clojars non sono più supportati

Fonte originale è qui https://github.com/technomancy /leiningen/blob/stable/doc/DEPLOY.md

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top