【问题标题】:Gradle - How to apply plugin configurations on specific sub-projects?Gradle - 如何在特定子项目上应用插件配置?
【发布时间】:2018-06-06 07:12:04
【问题描述】:

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

【问题讨论】:

  • 您可以将这些行放到一个单独的.gradle 文件中,然后在每个文件中使用apply from: myScalaStuff.gradle
  • @OliverCharlesworth 这行得通,这实际上是我迄今为止的首选方式。您可以将其添加为答案吗?

标签: scala gradle build


【解决方案1】:

你可以在你的顶级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 = []
     }
     ...
  }

【讨论】:

  • 不错的技巧 :) 实际上,我宁愿避免使用这些魔术技巧,并使其更加明确,以便加入该项目且不一定对 Groovy 非常熟悉的其他人更清楚。关于sourceSets,我实际上是为了解决默认情况下无法从Java类中导入Scala代码的问题而查到的,我想我明白了它的工作原理;它禁用了 Java 插件的编译,并让 Scala 编译 Java 文件(因为它更好地处理了两者的混合)。
  • 我不确定你当时的问题是什么。您要么使用“魔术技巧”,要么在子项目的构建文件中明确说明子项目特定的内容。你的问题听起来后者正是你想要避免的......现在,你似乎想要避免前者:)
  • 我只是想定义某种只适用于显式标记/注释的子项目的行为。对我来说似乎没有那么神奇:)
  • 我明白了。那么,if(explicitlyTagged) { someSortOfBehavior } 不符合“仅适用于……的某种行为”呢?
  • 我的问题不在于if 语句,而是根据子项目的文件系统结构而不是构建文件隐含地包含此行为。
【解决方案2】:

我认为您想要进行项目过滤,如 here 所述。
所以,简而言之:

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

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

【讨论】:

  • 可以,但我不想管理使用 scala 的项目列表;相反,我宁愿在自己的构建文件中单独“注释”每个项目。有没有办法在编译具有特定属性的项目之前执行此方法?我尝试使用extit.hasProperty(),但似乎子项目中的extconfigure之后执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 2014-05-19
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2016-06-21
相关资源
最近更新 更多