【问题标题】:[Gradle][Play] where is compilePlayBinaryScala defined?[Gradle][Play] compilePlayBinaryScala 定义在哪里?
【发布时间】:2017-11-29 06:34:29
【问题描述】:

我对 gradle 和 Play 比较陌生。

我正在开发使用 gradle 作为构建系统的游戏项目。我正在尝试使用构建缓存来获得更好的性能。从构建扫描中,我观察到“compilePlayBinaryScala”不可缓存,并且大多数其他任务都依赖于“compilePlayBinaryScala”。为“compilePlayBinaryScala”启用缓存将真正扩大构建规模。

Gradle 官方文档列出了.*PlayBinary 任务 (https://docs.gradle.org/current/userguide/play_plugin.html)

我找不到“compilePlayBinaryScala”或任何其他.*PlayBinaryScala 任务的明确任务定义。这些任务在哪里定义?

根据我的研究,我可以看到这个文件可以创建任务。但是,我不确定。 https://github.com/gradle/gradle/blob/de399b5015b19c07d94aa2eabec47709fc719a68/subprojects/platform-play/src/main/java/org/gradle/play/plugins/PlayApplicationPlugin.java#L160

由于我是新手详细解释为什么这样做会很有帮助。

【问题讨论】:

    标签: java gradle playframework


    【解决方案1】:

    任务是在该文件中创建的,但不是在您链接到的方法中创建的。使用createScalaCompileTaskcreateJarTaskscreatePlayRunTask 等方法为每个二进制文件创建任务。 @Mutate@BinaryTasks、`@ComponentBinaries 是 Gradle 中称为基于规则的模型(也是软件模型)的一部分。用法在Play plugin documentation 中进行了描述。 Gradle 团队用这个模型试验了几年,但最终决定放弃它,并且没有正式弃用它(参见博文State and future of the Gradle Software Model

    compilePlayBinaryScala 的类型是PlatformScalaCompile。这在文档中进行了说明,也可以通过运行./gradlew model 或添加类似记录类型的任务操作来确定。 "compilePlayBinaryScala" 的任务名称是根据作为插件一部分的几个不同的东西计算出来的。组件名称是"play",因此二进制文件和任务是基于它和目标平台生成的。如果插件支持超过 1 个平台(在撰写本文时不支持),任务命名约定会更加明显。 Gradle 的native support 是另一个基于组件名称生成任务的插件示例。

    不值得深入探讨规则模型的结构,但高层是方法的第一个参数是主题并且可以更改,而其余参数是输入并且是不可变的。在上面链接的方法中,您会注意到第一个参数的类型为ModelMap<Task>。那是可以变异的Task 对象的集合。流程看起来像这样(我可能遗漏了一些东西):

    这就是我可以为您提供的尽可能多的详细信息,而无需真正深入了解ScalaLanguagePlugin./gradlew model 会给你一个报告,告诉你一些东西是从哪里来的,可能会很有帮助,但它也可能不是因为东西是在该模型和普通 Gradle 配置模型之间进行管理的。

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2016-06-04
      • 2016-03-22
      • 2016-02-19
      • 2016-12-31
      相关资源
      最近更新 更多