2013-02-07 18 views
5

Stiamo lavorando a un progetto che presenta un'interopzione Clojure-Java. A questo punto abbiamo una singola classe che ha una varietà di dipendenze che inseriamo in una libreria utente in Eclipse per lo sviluppo, ma ovviamente non aiuta quando si utilizza Leiningen (2.x). La maggior parte delle nostre dipendenze sono proprietarie, quindi non si trovano su un repository da qualche parte.Come si configurano le dipendenze proprietarie per Leiningen?

Qual è il modo più semplice/giusto per farlo?

Ho visto leiningen - how to add dependencies for local jars?, ma sembra non aggiornato?

Aggiornamento: così ho fatto un repository Maven locale per il mio vaso seguenti these instructions e the lein deployment docs on github, e modificato il mio file di project.clj in questo modo:

:dependencies [[...] 
       [usc "0.1.0"]] 
:repositories {"usc" "file://maven_repository"} 

Dove maven_repository è sotto la directory del progetto (quindi non utilizzando file:///). Quando ho fatto funzionare "dipendenze Lein" - ho ricevuto questo messaggio:

Retrieving usc/usc/0.1.0/usc-0.1.0.pom from usc 
Could not transfer artifact usc:usc:pom:0.1.0 from/to usc (file://maven_repository): no supported algorithms found 
This could be due to a typo in :dependencies or network issues. 
Could not resolve dependencies 

Cosa si intende per "no algoritmi supportati trovato" e come posso risolvere il problema?

Update2: Trovato l'ultimo bit della risposta here.

risposta

1

aggiungerli come dipendenza al progetto leiningen. Puoi inventare nomi e versioni. quindi eseguire lein deps e il messaggio di errore quando non riesce a trovarlo ti darà il comando esatto da eseguire in modo che tu possa installare il jar sul repository locale quindi si potrebbe decidere di utilizzare un repository condiviso è possibile utilizzare questo stesso processo per mettere le tue dipendenze lì.

0

YMMV ma ho trovato preferibile utilizzare Maven anziché Leiningen quando si lavora con progetti Polyglot Clojure/Java.

Principalmente perché gli strumenti basati su Java (Eclipse, ecc.) Comprendono i progetti Maven ma non capiscono i progetti di Leiningen. Sta lentamente migliorando con l'eccellente plug-in Clojure antiorario, ma l'integrazione non è ancora abbastanza buona per un efficiente flusso di lavoro basato su IDE.

Sul lato repository di cose, suggerirei di creare un repository Maven condiviso privato. Prima o poi ne avrai bisogno se pianifichi di gestire un complesso insieme di dipendenze all'interno del tuo team: potrebbe anche azzannare il proiettile e farlo ora.

1

@ La risposta di Arthur è buona, ma ho pensato che mi sarei arricchito un po 'di più in quanto lasciava dei dettagli carenti.

  1. Tenere sempre presente Repeatability. Se non lo fai in modo che chiunque abbia bisogno di accedere agli artefatti possa accedere agli artefatti in un modo standard, stai chiedendo supporto per l'inferno.

  2. Il documentation on deployment è un buon posto dove andare per scoprire tutto ciò che è necessario sapere sulla distribuzione dei propri artefatti. Dato che ti trovi in ​​un ambiente poliglotta probabilmente non puoi avere lein occuparti di distribuire tutte le tue risorse, ma almeno puoi ottenere i tuoi jar specifici per il clojure in S3 o persino una condivisione di file, se lo desideri. Il resto dei tuoi artefatti dovrà utilizzare Maven o Ant direttamente per caricare le risorse sul repository Maven sul file server o S3.Nella mia attuale azienda stiamo usando l'eccellente s3 wagon private della tecnomangia, con grande effetto per l'hosting dei nostri artefatti closed source e clojars per l'hosting di tutto ciò che possiamo open source.

  3. A cosa fa riferimento Arthur sta facendo un lein install. Tutto ciò che fa è installare una copia del progetto corrente nella tua directory locale .m2 in modo che altri progetti sulla tua scatola possano farvi riferimento. A meno che tu non abbia configurato l'installazione di Maven per utilizzare una directory condivisa per la tua cartella .m2 (forse non è una cattiva idea nel tuo ambiente?), Questo significa che chiunque altro ritiri il tuo progetto non sarà in grado di costruirlo. Se si desidera seguire questa rotta, è necessario impostare il nodo localRepository in $M2_HOME/conf/settings.xml come posizione condivisa a cui il resto del team ha accesso. Vedere the docs per ulteriori informazioni.

Problemi correlati