Gradle - 如何在特定子项目上应用插件配置?

时间:2017-12-24 15:05:46

标签: scala gradle build

我有一个混合的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子项目中,而只是在其构建文件中添加一个简单的属性(或类似的东西)。我怎样才能做到这一点?

2 个答案:

答案 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或其他任何操作,而不是这个简单的==条件。