2009-12-18 13 views
8

Penso che molti di voi sapranno, i programmatori spesso riutilizzano il codice di altri software. Penso che la maggior parte delle volte sia una buona idea. Ma se usi il codice di un altro progetto, il tuo programma dipende dall'altro progetto.Qual è il modo migliore per risolvere le dipendenze tra i progetti Java?

Nel mio caso corrente ho ottenuto tre progetti Java A, B e C. Ora A utilizza B e B utilizza C. Sto usando eclissi IDE e aggiunto B al percorso di costruzione di A e C al percorso di costruzione di B. Ora c'è un errore del compilatore che A non può risolvere qualcosa da C. Quindi devo aggiungere C al percorso di build di B.

Quindi qual è il modo migliore, per risolvere le dipendenze mantenendo il programma come indipendente come possibile da altri progetti?

Mi piacerebbe sapere è in generale e in riferimento alla mia situazione attuale. Ci sono modi migliori per farlo? Cioè ci sono impostazioni del percorso di classe nella vista di configurazione di avvio/debug, ma penso che non saranno d'aiuto in fase di compilazione.

Grazie in anticipo.

+1

Non capisco perché questo è stato down-votato, e senza commento a questo. È una domanda valida, se in qualche modo a sinistra di newbie-ish. Forma cattiva –

risposta

7

Questo suona come parte del problema impostato da Maven. Usando Maven ed Eclipse, ovvero m2eclipse, puoi avere progetti che usano altri progetti e tutta la risoluzione delle dipendenze viene gestita per te.

+1

Inoltre, se si utilizza IntelliJ IDEA, l'integrazione Maven integrata è fantastica. – danben

+2

Utilizziamo Maven per un progetto di grandi dimensioni. Mi piace una volta che è stato configurato e funziona correttamente, tuttavia la documentazione è debole in molti punti e può avere una curva di apprendimento ripida. Siate consapevoli di questi problemi prima di intraprendere questa strada. –

+0

Se vuoi saperne di più su Maven, c'è un ebook gratuito da sonatype qui: http://www.sonatype.com/Support/Books – Kjellski

2

Mi sembra che tu stia facendo ciò che devi senza incorporare uno strumento di gestione delle dipendenze come Ivy o Maven, che fornisce la capacità di "gestione delle dipendenze transitive". Con uno di questi strumenti puoi semplicemente specificare che A dipende da B e B dipende da C e sapranno automaticamente che A avrà anche bisogno di C.

I vantaggi di Maven (questo è quello che ho esperienza in) entra in gioco anche quando è il momento di impacchettare i progetti per la distribuzione poiché può facilmente raccogliere tutte quelle dipendenze (fino in fondo alla gerarchia) e posizionarle insieme in una cartella di distribuzione o un grosso JAR che contiene tutte le dipendenze. Ci vuole un po 'di tempo per leggere e impostare per entrare in uno strumento come Maven, ma rende molto più facile il compito di gestire le dipendenze, specialmente man mano che crescono.

0

La gestione delle dipendenze è un argomento enorme. Maven, Ivy e altri strumenti sono stati sviluppati per alleviare il dolore con un certo successo. Entrambi questi strumenti creano una gerarchia di dipendenze in modo da non incorrere nella situazione che hai descritto. Hanno anche dei plugin Eclipse in modo che Eclipse riconoscerà quella gerarchia.

Per utilizzare veramente questi framework, è necessario modificare il processo di compilazione corrente. Maven probabilmente richiede più impegno di Ivy, ma nessuno dei due è banale, e capire come impostarlo richiede del tempo. Detto questo, è molto utile definire e gestire le proprie dipendenze in modo chiaro.

1

Utilizziamo Maven ed è essenziale per i nostri progetti. È un buon momento per imparare: le dipendenze da più di 3 progetti possono essere spaventose. Maven si occupa delle versioni in modo tale che se, per qualsiasi motivo, si dovesse dipendere da Foo.1.2.3, allora Maven si assicurerà di non ottenere la versione sbagliata.

Tuttavia non è banale. Se usi Netbeans, è costruito meglio di Eclipse e può aiutarti ad imparare. (Anche i progetti sono abbastanza intercambiabili tra i due sistemi).

Maven supporta un sacco di concetti nel suo file POM (pom.xml) che include informazioni sulla licenza, contributori, argomenti, ecc. In modo da ottenere molto più della semplice gestione delle dipendenze. E supporta la modularizzazione dei progetti.

Non saltare la curva di apprendimento: è necessario sapere come funziona.Ma troverai anche domande SO precedenti che ti aiuteranno

1

Altri hanno menzionato molti dei buoni strumenti, probabilmente è il più comune. Ivy è un'altra che è più mirata solo alla gestione delle dipendenze. Personalmente uso il gradle che ha alcune delle migliori di tutte quelle caratteristiche sotto un familiare involucro groovy ... che è ancora in evoluzione e ben documentato. ;)

Una cosa da tenere presente è il modo in cui questi strumenti gestiscono le dipendenze transitive. Nel tuo esempio, C è una dipendenza transitiva di A perché A dipende da B che dipende da C. Alcuni di questi strumenti di compilazione gestiranno questo tipo di dipendenza in modo diverso e possono sorprenderti quando meno te lo aspetti.

Ad esempio, se A si riferisce effettivamente al codice da C, cioè: ha una dipendenza in fase di compilazione su C, quindi l'installazione A-> B-> C funzionerà in qualcosa come Maven. Dall'altra parte, gradle ti farà dichiarare che A dipende da C ... dato che lo fa. Le dipendenze di runtime sono completamente risolte in entrambi i modi.

La sorpresa arriva quando hai temporaneamente incluso qualcosa per mesi e parte del tuo codice si è basata su aspetti di C e decidi che non hai più bisogno di una dipendenza B. All'improvviso il tuo codice non verrà creato finché non avrai capito che hai bisogno di una dipendenza A-> C specificata. In questo esempio, è piuttosto semplice da scoprire, ma a volte non lo è.

E se parlare così ti fa nuotare la testa un po 'e non pianifichi che il tuo progetto sia molto più complicato ... allora puoi probabilmente restare con quello che stai facendo per un po'. Come altri hanno detto, è il modo giusto per farlo senza uno strumento che ti aiuti.

1

Utilizzare Maven per gestire le dipendenze e quindi utilizzare il plug-in delle dipendenze per visualizzare le dipendenze.

è possibile eseguire

mvn dipendenza: analizzare

o

mvn dipendenza: albero -Dverbose = true

questo vi aiuterà molto.

1

senza dubbio si dovrebbe usare uno strumento di gestione delle dipendenze visto che le persone hanno notato ... manualmente però, archiviare B e C in B_C.jar. Verifica che la dipendenza di B da C sia risolta all'interno del Jar.

Quindi aggiungere B_C.jar nel classpath ...

Problemi correlati