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

问题描述 投票:0回答:2

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

scala gradle build
2个回答
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
投票

我想你想做项目过滤,如here所述。 所以,简而言之:

configure(subprojects.findAll {it.name == 'myScalaProject'}) {
    // Scala projects specific settings
}

当然,由于Gradle使用Groovy语法,您可以将这些项目名称放在列表中并执行contains或其他任何操作,而不是这个简单的==条件。

© www.soinside.com 2019 - 2024. All rights reserved.