Abbiamo un grande sistema Java (> 500.000 LOC) che dipende dai pacchetti 40-50 OSS . Il sistema è compilato con Ant e la gestione delle dipendenze è attualmente gestita manualmente. Sto indagando su Ivy e/o Maven su dipendenze automatiche. L'anno scorso abbiamo esaminato Maven come sistema di automazione delle build e l'abbiamo rifiutato perché richiederebbe totalmente la ristrutturazione di per far corrispondere l'architettura di Maven al nostro sistema. Ora sono cercando di automatizzare solo le attività di gestione delle dipendenze.Gestione grande dipendenza sistema Java
Ho fatto qualche esperimento con Ivy ma ho avuto problemi. Per esempio, quando ho specificare ActiveMQ come una dipendenza, e dico Ivy per utilizzare le POM nel repository Maven per la specifica dipendenza, Ivy recupera un mucchio di pacchetti (Jetty, Derby e Geronimo per esempio), che io sappia aren' t necessario semplicemente usare ActiveMQ.
Se ho impostato usepoms = "false" in ivysettings.xml recupera solo activemq.jar, ma che sembra sconfiggere lo scopo di Ivy e relega ad un semplice vaso-Fetcher con manualmente costruite dipendenza specifiche .
C'è un grosso problema qui, quello che si chiamava "DLL Hell" in Windows. In alcuni casi, due dipendenze dirette di primo livello corrisponderanno a a versioni diverse della stessa dipendenza transitiva (per l'istanza log4j.jar ). Solo un log4j.jar può trovarsi nel classpath, quindi la risoluzione delle dipendenze da implica la determinazione manuale della versione compatibile con tutti i suoi client nel nostro sistema.
Credo che tutto si riduce alla qualità della dipendenza specifiche di ogni pacchetto (POM). Nel caso di ActiveMQ, non ci sono dichiarazioni dello , quindi qualsiasi riferimento ad ActiveMQ scaricherà tutte le sue dipendenze a meno che non escludiamo manualmente quelle che sappiamo non vogliamo .
Nel caso di log4j, la risoluzione automatica delle dipendenze richiederebbe che tutti i clienti di log4j (altri pacchetti che dipendono da log4j) validate contro tutte le versioni precedenti di log4j e forniscono una gamma (o lista) delle versioni log4j compatibili nel POM. Probabilmente è lo stesso molto da chiedere.
È questa la situazione attuale o mi manca qualcosa?
+1 per una chiara descrizione del problema con le soluzioni tentate. Spero tu abbia una buona risposta. –
Le prime 4 risposte in uscita offrono tutte una prospettiva preziosa. Kevin's è conciso e preciso. Robert e Rich forniscono molti più dettagli. Vladimir contribuisce con un'opinione positiva basata sull'esperienza del mondo reale. I quattro insieme mi aiutano a stabilire le mie aspettative e indicano la via per risolvere il problema. Mi piacerebbe "accettare" tutte e quattro le risposte, ma SO non lo consente. Sto dando l'accettazione a Robert Munteanu perché era il primo ad avere una risposta dettagliata. –