Evita i conflitti di versione delle dipendenze?

10

Qualsiasi progetto Java che utilizza il mio jar avrà quasi sicuramente una dipendenza aggiuntiva da un altro jar, che il mio jar contiene anche come dipendenza.

Il problema è che l'altro jar ha più versioni.

Come posso evitare problemi che potrebbero sorgere, nel probabile caso in cui la versione del tuo secondo jar del progetto sia diversa dalla versione del mio jar del secondo jar?

Non voglio che i miei utenti abbiano il fastidio in più di fare qualche scherzo di classe per aggiungere il mio barattolo.

Dovrei semplicemente creare diverse versioni del mio barattolo, per ogni versione possibile di quella dipendenza comune? E poi scegli la versione del mio jar che utilizza la stessa versione del 2 ° jar che hai già?

C'è un modo più intelligente di gestirlo e rendere più semplice l'utilizzo del mio barattolo senza conflitti?

    
posta Pat Meeker 30.07.2017 - 05:22
fonte

1 risposta

10

Non è un problema tuo . Spetta al tuo utente finale risolvere. Viene solo con il territorio dell'utilizzo di dipendenze di terze parti e ho dovuto risolvere i conflitti di dipendenza più volte di quanto contenga. Non puoi aspettarti di soddisfare i conflitti di dipendenza specifici di ogni progetto.

Il tuo software dovrebbe funzionare correttamente con le ultime versioni delle tue dipendenze. A meno che la dipendenza non modifichi la loro interfaccia su ogni versione, dovresti avere una gamma di compatibilità (ad esempio il tuo software funziona per tutte le versioni di dep nell'intervallo [2.0.0, 3.0.0) ). Finché continui a mantenere il software, dovresti cercare di mantenerlo compatibile con l'ultima versione di tutte le tue dipendenze.

Detto questo, ecco alcune cose che troverei utile come sviluppatore che utilizza il tuo software con la mia versione diversa della tua dipendenza.

  • Se l'integrazione tra il tuo progetto e un altro progetto è stretta, è utile avere una tabella di compatibilità nella documentazione. Indipendentemente da ciò, dovresti menzionare eventuali problemi noti con versioni specifiche della dipendenza nella tua documentazione. In caso contrario, gli sviluppatori devono trovare una versione compatibile per tentativi ed errori.
  • Riassumere la collaborazione con la dipendenza tramite un'interfaccia e progettare il software in modo che l'implementazione possa essere sostituita con un'iniezione di dipendenza. Ciò mi consente di utilizzare l'utente finale per sostituire la mia integrazione con la versione x della libreria senza infastidirti.
  • Avere un tracker di problemi pubblici in modo che gli utenti possano chiederti di supportare determinate versioni della dipendenza comune. Se trovi che molti utenti desiderano supporto per una versione incompatibile della dipendenza, puoi pubblicare versioni per entrambi. Vedi questo esempio di Maven dove hanno come target più piattaforme - il supporto per diverse versioni di una dipendenza dovrebbe essere simile .
risposta data 31.07.2017 - 00:23
fonte