我有一个混合的Java / Scala Maven多项目,我想迁移到Gradle。
有些子项目只有Java代码,有些只有Scala代码,有些只有两种。在任何这些上应用java插件似乎工作正常,但是尝试在没有Scala代码的项目上应用Scala插件会因缺少依赖(Scala语言)而失败,这是有道理的。
现在,我希望将Scala插件应用于特定的子项目。不仅如此,我还需要应用以下配置,因为我的一些Java代码依赖于Scala代码:
apply plugin: 'scala'
sourceSets.main.scala.srcDir "src/main/java"
sourceSets.main.java.srcDirs = []
我还需要在之前执行执行java插件(否则会失败)。
我不想将这些行复制到每个特定的Scala子项目中,而只是在其构建文件中添加一个简单的属性(或类似的东西)。我怎样才能做到这一点?
答案 0 :(得分:3)
您可以在顶级build.gradle
中执行以下操作:
subprojects {
...
if(file("src/main/scala").directory) { // or whatever condition you want to use
apply plugin: 'scala'
// This seems like a very weird thing to do ...
// Assuming, you know what you are doing
sourceSets.main.scala.srcDir "src/main/java"
sourceSets.main.java.srcDirs = []
}
...
}
答案 1 :(得分:1)
我认为你想要进行项目过滤,如here所述 所以,简而言之:
configure(subprojects.findAll {it.name == 'myScalaProject'}) {
// Scala projects specific settings
}
当然,由于Gradle使用Groovy语法,您可以将这些项目名称放在列表中并执行contains
或其他任何操作,而不是这个简单的==
条件。