У меня есть большое унаследованное Java-приложение с интерфейсом Grails, и я работаю над заменой переднего конца Grails новым, написанным в Play. Некоторые из зависимостей модуля (Maven) в старой Java приводят к проблемным/противоречивым вещам. Сортировка всех устаревших зависимостей Java на данный момент не является опцией, поэтому я хотел бы просто исключить транзитивные зависимости, которые мне не нравятся.
В Grails BuildConfig.groovy
я могу определить список исключений:
def some_bad_things = [
[group: 'some-evil-group'],
[name: 'some-evil-module-from-another-group'],
[name: 'some-other-evil-module']
]
а затем использовать его для целого блока прямых зависимостей:
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
}
}
Не очевидно, что синтаксис Build.scala
предназначен для выполнения того же самого. Перевод фактических зависимостей довольно прост...
val appDependencies = Seq(
"com.foo" % "foo-module1" % "1.0" % "compile",
// ... 20 or 30 modules ...
"com.quux" % "quux-module42" % "7.2" % "compile"
)
... но исключений нет; похоже, что я должен исключать все индивидуально:
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")
)
Я предполагаю, что здесь не так много научной науки о ракетах, и даже если нет возможности использовать исключение во всем мире, не должно быть сложно написать какую-либо вспомогательную функцию или что-то подобное это для меня. Но я новичок Scala, и мне даже не кажется очевидным, какие типы я ищу или что делают все операторы, или сколько из того, что я вижу, это просто Scala/SBT и сколько стоит Плей-специфичны. Итак, предложения приветствуются?