2015-03-04 12 views
5

La descrizione della strategia di unione sbt-assembly denominata rinomina ha suonato come se potesse consentire qualcosa di simile all'operazione di ombreggiatura dello maven-shade-plugin che riposizionerà le classi ei relativi riferimenti per consentire la gestione di versioni incompatibili di librerie.Nel caso in cui l'assemblaggio di sbt esegua un riposizionamento di classi simile a "maven-shade-plugin"?

Sarebbe opportuno che sbt-assembly eseguisse tale funzione?

Ho usato la seguente strategia di unione per tentare di utilizzare il rename come meccanismo di riposizionamento ma mentre esso corrisponde a tutti i file, li passa direttamente (che è coerente con l'analisi del codice).

assemblyMergeStrategy in assembly := { s => 
    s match { 
    case PathList("com", "clearspring", "analytics", _*) => { 
     println("match_cs: " + s) 
     MergeStrategy.rename 
    } 
    case x => { 
     println("x: " + x) 
     val oldStrategy = (assemblyMergeStrategy in assembly).value 
     oldStrategy(x) 
    } 
    } 
} 
+0

vedo parte di questa risposta [qui] (http://stackoverflow.com/questions/24596914/sbt-assembly-rename-class-with-merge-conflicts-shade) che sbt- l'assemblea non oscura. Quale lascia la parte "sarebbe appropriato"? – Traveler

+0

Questo ha mai funzionato ?? Sono nella stessa situazione ... – acidghost

+0

@acidghost: No, per mio collegamento, sbt-assembly non eseguirà questa trasformazione. Devi solo scimmiottare con gli sbt esclusi e sono molto dipendenti dall'attuale serie di giare dipendenti. – Traveler

risposta

5

aggiornato nel settembre 2015:

SBT-assemblaggio 0.14.0 aggiunge shading supporto.

sbt-assembly può schermare le classi dai progetti o dalle dipendenze della libreria. Sostenuto da Jar Jar Links, la trasformazione bytecode (tramite ASM) viene utilizzata per modificare i riferimenti alle classi rinominate.

assemblyShadeRules in assembly := Seq(
    ShadeRule.rename("org.apache.commons.io.**" -> "[email protected]").inAll 
)