我有一个带有 Grails 前端的大型遗留 Java 应用程序,我正在努力用 Play 编写的新前端替换 Grails 前端。遗留 Java 中的一些(Maven)模块依赖项带来了有问题/冲突的事情。在这一点上,整理出所有遗留的 Java 依赖项并不是一个真正的选择,所以我只想排除我不喜欢的传递依赖项。
在 GrailsBuildConfig.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,有多少是特定于 Play 的。那么,欢迎提出建议?