Come si gestiscono le dipendenze esterne in un progetto open source?

23

Quando si scrive un progetto open-source e si utilizza Google Code o GitHub e si vuole usare una libreria come Lua, come si dovrebbe fare una cosa simile?

  • La dipendenza deve essere inclusa nel repository?
  • La dipendenza deve essere costruita all'interno dello stesso script di costruzione del resto del progetto o da uno script di compilazione separato?

Dato che la libreria non ha bisogno di installazione prima della compilazione.

    
posta rightfold 22.09.2011 - 18:11
fonte

5 risposte

10

Raccomando vivamente di leggere la documentazione di Git sui sottomoduli ; affronta proprio questo problema, assumendo che tutte le tue fonti utilizzino Git. Se non lo fanno, puoi sempre creare un repository git ai fini dell'integrazione. Lo sforzo è banale e il guadagno è significativo.

    
risposta data 22.09.2011 - 18:31
fonte
16

Should the dependency be included in the repository?

Penso che le dipendenze dovrebbero sempre essere incluse nel repository a patto che includerle non violino nessuna delle condizioni d'uso. Poche cose sono più fastidiose del dover trovare manualmente le giuste versioni delle giuste dipendenze prima di poter creare una build. Certo, questo è facile quando hai strumenti automatici per farlo, che possono trovare e scaricare la giusta dipendenza, ma cosa succede se non sei connesso al web al momento o se il server è inattivo o il progetto della dipendenza è stato interrotto completamente e portato offline? Includere sempre le dipendenze, se possibile.

Should the dependency be built from within the same build script as the rest of the project, or from a separate build script?

A meno che non ci sia un buon motivo per compilare dal sorgente, usa le versioni precompilate.

E perché non fornire opzioni nello script di compilazione? Un semplice passaggio per scegliere se compilare o meno le dipendenze. Se l'utente sceglie di compilare anche le dipendenze, invoca semplicemente i propri script di compilazione dallo script di build del tuo prodotto. Quindi l'utente può richiamare manualmente gli script di compilazione delle dipendenze o scegliere di creare una compilazione completa di tutto. Ma consegnerei le dipendenze come binari se non c'è una buona ragione per compilarli dalle fonti. Penso che nel mondo Open Source, alcune licenze richiedano di distribuire le fonti insieme al tuo prodotto, ma ciò non significa che non puoi averle precompilate.

In breve: Fornisci un pacchetto di lavoro autonomo, se possibile. Ciò fornirà la massima praticità ai tuoi utenti.

    
risposta data 22.09.2011 - 18:20
fonte
3

Questo può o non può applicarsi al tuo caso d'uso, ma quello che facciamo al lavoro è includere una cartella "Riferimenti" in ogni ramo. Inseriamo DLL di terze parti qui. Ciò causa un sacco di duplicazione di binari relativamente immutabili nel controllo del codice sorgente, ma lo spazio di archiviazione è economico e in ogni punto ogni ramo e amp; il tag ha esattamente le dipendenze (e la versione!) che si aspettano.

Precompiliamo noi stessi le dipendenze e spostiamo i binari compilati in quella cartella. Anche la nostra libreria condivisa in-house è trattata in questo modo. In questo modo la stessa tecnica funziona con librerie proprietarie precompilate, librerie open source e librerie interne.

Per quanto riguarda effettivamente rispondere alla tua domanda ora che ho riletto, fai la stessa cosa, e menziona solo che il tuo progetto usa una versione 1.3.5 precompilata di Lua.

    
risposta data 22.09.2011 - 18:17
fonte
0

Essendo un negozio Eclipse, abbiamo appena iniziato a utilizzare Buckminster per gestire il nostro processo di compilazione / assemblaggio / distribuzione.

Il nostro primo stadio è stato quello di estrarre tutte le nostre librerie dipendenti esistenti e lasciare che Buckminster si occupasse di materializzare quelli corretti. Ciò rende la distribuzione molto più rapida e più piccola.

Il prossimo passo sarà spostare il nostro repository monolitico svn in una serie di repository modulari git .

Non so quanto bene buckminster si possa integrare con i sottomoduli git (o sotto-campi mercuriali per quella materia), ma è bello che buckminster sia agnostico riguardo al VCS usato per ogni dato componente.

    
risposta data 22.09.2011 - 19:33
fonte
0

Should the dependency be included in the repository?

Può essere referenziato in repository (con qualsiasi metodo usabile per SCM), se questa dipendenza è parte integrante del prodotto (dipendenza origine), non dipendenza binaria , che può essere risolto separatamente

Should the dependency be built from within the same build script as the rest of the project, or from a separate build script?

Non ha importanza. Puoi preferire qualsiasi metodo, in base alle tue esigenze (velocità / trasparenza / gestibilità / ecc.)

    
risposta data 21.01.2013 - 07:28
fonte

Leggi altre domande sui tag