2010-01-13 10 views
11

Sto sviluppando un'applicazione Web in Java e sto utilizzando diversi file JAR di terze parti nella mia cartella lib. Ho anche Subversion come strumento di controllo della versione.Controllare i file JAR (librerie) nello strumento Controllo versione: è una buona pratica?

La mia domanda è, durante il controllo dei file di progetto, dovrei effettuare il check-in anche nei file JAR o non è necessario per la versione dei file JAR poiché non li sto comunque modificando?

risposta

9

Questa è una domanda piuttosto soggettiva ... In genere applica la seguente regola empirica: se ho il codice per creare un binario, controlla il codice e mai il binario; se è necessario un binario per eseguire il mio codice e proviene da una fonte esterna, controllare il file binario.

Nota che si vorrà per conformarsi a qualunque condizioni legali potrebbero venire avanti con il check-in una terza binario parte il repository ..

+0

Non penso ci siano problemi legali, dal momento che sto usando principalmente le librerie open source. si! Ho deciso di fare il check-in per tutti i JARS. – Veera

7

mi sento di raccomandare che, ove possibile, si dovrebbe usare Maven. Quindi non dovrai controllare i JAR di terze parti nel tuo repository per condividerli con il tuo team di sviluppo (il più delle volte).

Se non si è già a conoscenza, Maven svolge due compiti principali: creare automazione e gestione delle dipendenze. Ogni progetto ha un file descrittore che configura, tra le altre cose, quali JAR usi come dipendenze. La cosa bella è che Maven risolverà automaticamente per te le dipendenze di quei JAR, le loro dipendenze e così via.

+1

Se sei più a tuo agio con Ant, allora Ivy Apache (http://ant.apache.org/ivy/) potrebbe essere più facile da capire. – notnoop

+3

È vero, sebbene abbia usato sia Ant/Ivy che Maven, preferisco di gran lunga Maven. – danben

1

Gestisco i repository SVN per un team di sviluppo di medie dimensioni e, per facilità di utilizzo, eseguiamo il check-in dei binari di cui abbiamo bisogno; anche il nostro in alcuni casi.

Penso che questo sia ancora rilevante, ma SVN ha storicamente funzionato male con i binari. Uno sviluppatore Java presso l'IBM si è imbattuto in questo problema, ha investigato e ha scritto le sue scoperte. Si potrebbe trovare utile:

Performance tuning Subversion: Store and handle binaries without the performance drag

Ecco il takeaway:

I risultati di questa indagine sono chiaramente specifico del sistema oggetto di indagine, per cui è improbabile che i valori effettivi indicati sono di molto significato per altri sistemi. I pattern sono più importanti perché verranno replicati in qualsiasi sistema Subversion. Secondo i nostri risultati, quando si memorizza un insieme di file binari in Subversion:

  • Il metodo più tempo efficiente è quello di creare un unico file compresso contenente il file binario.
  • Il metodo più efficiente in termini di spazio consiste nell'utilizzare lo script di check-in di Subversion in una struttura di directory normale.
  • L'utilizzo di qualsiasi forma di autenticazione sul server Subversion comporterà una perdita di prestazioni.
  • Una macchina dedicata e potente è ottimale per eseguire Subversion.
+0

Il link è 404 ora – koppor

+0

@koppor: WayBackMachine per il salvataggio: contento 18 persone hanno avuto l'accortezza di salvare questa pagina. :) –

2

Personalmente vorrei cercare di evitare il check-nelle dipendenze di un progetto nel repository versione SCM controllo.In genere ciò avverrebbe utilizzando Maven come suggerito in un'altra risposta e implementando un repository Maven interno all'azienda che ha il vantaggio di rendere questa risorsa locale al team di sviluppo e di fornire una posizione in cui gli artefatti completati/versionati/rilasciati del proprio progetto possano risiedere .

Il problema che vedo con Jars essere SCM è che innanzitutto SCM è per la gestione del codice sorgente e sono ottimizzati per tale scopo. Gli artefatti compilati non sono codice sorgente e binari, quando tipicamente si dirama o si aggiorna il binario che si sta facendo una copia del binario, poiché la maggior parte degli SCM non possono "diff" un file binario.

Un'altra considerazione è che cosa fai se hai due progetti che richiedono il check in delle dipendenze? Controllate i deps separatamente in ogni progetto e indossate la duplicazione? O fai un terzo progetto che contiene solo le dipendenze? E ora stai gestendo manualmente i file jar in quel progetto. Cosa succede se i tuoi due progetti richiedono dipendenze reciprocamente incompatibili?

In terzo luogo, come gestite le dipendenze tra i progetti (dove uno dei vostri progetti dipende dall'altro)? Il file jar è estratto da uno selezionato nell'altro? Che ne pensi del controllo delle versioni e di altri cambiamenti? Devi solo far controllare i due progetti e richiederne la costruzione in ordine stretto?

Nella mia esperienza e opinione, questi problemi sono in genere sufficienti in uno sviluppo di complessità moderata per rispondere definitivamente alla domanda: No, non è accettabile verificare le dipendenze del file jar. Utilizzare un sistema di build come Maven o Ant + Ivy (o un'altra alternativa) che fornisce un modo per esternalizzare la gestione e l'archiviazione delle dipendenze dal sistema di controllo del codice sorgente.

Problemi correlati