Ho una grande applicazione legacy Java con un front end Grails, e sto lavorando alla sostituzione del front-end Grails con uno nuovo scritto in gioco. Alcune delle dipendenze del modulo (Maven) nella legacy Java portano in cose problematiche/in conflitto. Ordinare tutte le dipendenze Java legacy non è davvero un'opzione a questo punto, quindi mi piacerebbe solo escludere le dipendenze transitive che non mi piacciono.Play 2.0/SBT: Escludere alcune dipendenze transitive da alcuni/tutti i moduli in Build.scala
In Grails BuildConfig.groovy
, posso definire un elenco di esclusioni:
def some_bad_things = [
[group: 'some-evil-group'],
[name: 'some-evil-module-from-another-group'],
[name: 'some-other-evil-module']
]
e poi utilizzarlo per un intero blocco delle dipendenze dirette:
dependencies {
compile (
[group: 'com.foo', name: 'foo-module1', version: '1.0'],
// ... 20 or 30 modules ...
[group: 'com.quux', name: 'quux-module42', version: '7.2'],
) {
excludes some_bad_things
}
}
Non è evidente che cosa la sintassi Build.scala
è per fare la stessa cosa La traduzione delle dipendenze attuali è piuttosto semplice ...
val appDependencies = Seq(
"com.foo" % "foo-module1" % "1.0" % "compile",
// ... 20 or 30 modules ...
"com.quux" % "quux-module42" % "7.2" % "compile"
)
... ma le esclusioni non lo sono; sembra che devo escludere tutto individualmente:
val appDependencies = Seq(
("com.foo" % "foo-module1" % "1.0" % "compile"),
.exclude("some-evil-group", "evil-module-1")
.exclude("some-evil-group", "evil-module-2")
.exclude("mostly-ok-group-1", "some-evil-module-from-another-group")
.exclude("mostly-ok-group-2", "some-other-evil-module"),
// ... 20 or 30 modules, each with four excludes ...
("com.quux" % "quux-module42" % "7.2" % "compile")
.exclude("some-evil-group", "evil-module-1")
.exclude("some-evil-group", "evil-module-2")
.exclude("mostly-ok-group-1", "some-evil-module-from-another-group")
.exclude("mostly-ok-group-2", "some-other-evil-module")
)
Presumo non c'è un sacco di scienza missilistica succedendo qui, e anche se non c'è di mezzo scatola di escludere a livello globale, non dovrebbe essere difficile da scrivere qualche funzione di aiuto, o qualcosa del genere, che lo farebbe per me. Ma io sono un principiante alla Scala e non mi sembra nemmeno ovvio quali tipi guardo o che cosa fanno tutti gli operatori, o quanto di quello che sto vedendo sia semplicemente Scala/SBT e quanto è specifico del Gioco. Quindi, i suggerimenti sono benvenuti?
che è di gran lunga i più eleganti soluzioni nei casi in cui tutti i sub-dipendenze sono opzionali. Per esempio. ha risolto http: //x-stream.github.io/inclusione per me che lotta con i duplicati di classe altrimenti. –