2015-10-01 7 views
5

Sto scrivendo una piccola libreria L1 che dipende da una libreria di terze parti L2. L2 ha più versioni che devono essere supportate da L1. Ogni versione di L2 è associata a una specifica API e JDK di destinazione. Non ho controllo su L2.Come posso organizzare il codebase del mio progetto che si rivolge a più versioni di libreria

Per esempio:

  • L2-v1.x -> ho bisogno di essere in grado di fornire L1-v1.x
  • L2-v2.x -> ho bisogno di essere in grado di fornire L1-v2.x
  • L2-v3.x -> ho bisogno di essere in grado di fornire L1-v3.x

Quale sarebbe il modo migliore per organizzare il codice in git (cosa dovrebbe Ho messo in master/quali rami/dovrei avere più progetti/più moduli) sapendo che devo costruire il progetto usando Maven e voglio che la compilazione sia il più semplice possibile?

Grazie in anticipo.

Modifica: tutte le versioni di L2 sono in Maven Central, tutte le versioni di L1 devono essere in centrale.

risposta

1

Se tali origini di libreria non sono in un repository di eventi, è possibile seguire "Using Git Submodules for Maven Artifacts Not in Central".
Git submodules è ideale per collegare una versione di previsione di un repository a un altro.

Ecco una versione adattata per la configurazione:

  1. si imposta il progetto di Maven per avere un pom genitore e il proprio progetto L1 come modulo Maven di quel progetto.

  2. Si importa il progetto desiderato nel progetto. Ad esempio il progetto L2 at the right tag.

git submodule add /url/to/L2.git 
cd L2 
git checkout <L2-vy.x> 
cd .. 
git add . 
git commit -m "Add submodule L2 at <L2-vy.x>" 
git push 

Il comando git submodule ora avrà clonato repository L2 in una cartella denominata L2.
Git avrà aggiunto un file .gitmodule che assomiglia a questo:

modulo [ "L2"] path = L2 url = /url/to/L2.git

È directory struttura dovrebbe assomigliare a questo

yourParentProject 
- pom.xml 
- .git 
- .gitmodule 
- L1 
    \- pom.xml 
- L2 
    \- pom.xml 
  1. In gen.xml padre si aggiunge la cartella L2 come modulo.
<modules> 
    <module>L1</module> 
    <module>L2</module> 
</modules> 

E nel progetto L1, si aggiunge L2 come dipendenza:

<groupId>com.github.user.L2</groupId> 
<artifactId>L2</artifactId> 
<version>L2-vy.x</version> 
  1. Tutto è pronto -su. Se chiami mvm test sul progetto principale, vedrai che prima costruisce L2 e poi il tuo progetto L1.

Usandolo

Quando altri sviluppatori clonare il vostro progetto, hanno bisogno di installare il modulo e usando il comando git:

git submodule update --init 
+0

Grazie per la risposta. Ho modificato la mia domanda: infatti tutto il codice di L1 è pensato per essere in centrale, le versioni L2 sono già disponibili come dipendenze. Come influisce il tuo approccio? – Kraal

+0

@kraal come dice l'articolo collegato, se L2 è in uso, allora non è necessario l'approccio del modulo: una semplice dichiarazione di dipendenza è sufficiente. – VonC

+0

Quindi, come faccio a gestire i sottomoduli utilizzando JDK di origine e destinazione diversi? Compilare tutto con lo stesso JDK può portare a bug inaspettati. Alcuni progetti usano moduli, altri usano rami diversi, altri progetti diversi, alcuni usano qualificatori Maven, beh, non è chiaro quale sia la pratica migliore. Finora ho usato i moduli, ma non sono convinto che sia la soluzione migliore. – Kraal

Problemi correlati