【问题标题】:Get gradle runtime configuration from Java file从 Java 文件获取 gradle 运行时配置
【发布时间】:2016-04-05 16:13:56
【问题描述】:

我创建了一个自定义 gradle 插件,我需要在其中使我的任务取决于此任务。因为我不能从 build.gradle 做,我打算用 Java 文件做。如何将其转换为 Java 方法?如何从 Java 中获取 configurations.runtime

task copyLibs(type: Copy) {
    from configurations.runtime
    into "$projectDir/libs"
}

build.gradle

apply plugin: 'maven'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'com.jfrog.bintray'

sourceCompatibility = 1.8

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
    compile gradleApi()
}

repositories {
    mavenCentral()
}

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
    }
}

【问题讨论】:

  • 你为什么不通过你的插件添加这个任务?
  • 这正是我想要做的。但我无法在我的 java 类中获得configuration.runtime。我的插件类是用 Java 编写的
  • configuration.runtime 由 java 插件添加。除非您自己将该插件添加到项目中,否则您将无法使用它。不过你可以添加一个任务监听器。
  • 我在插件的 build.gradle 中添加了 Java 插件
  • 这与将 java 插件添加到任何使用您的插件的项目不同。

标签: java gradle gradle-plugin


【解决方案1】:

您实际上在您的插件中,尝试为尚不存在的任务添加dependsOn,在应用您的插件时任务copyLibs 不存在。它稍后会在 gradle 解析 build.gradle 的其余部分时添加到任务图中。

如果任务 copyLibs 是标准的,您可以将它移动到您的插件实现中,这样您的插件就会知道 copyLibs。

我不确定这是否可行,必须对其进行测试,但您可能还可以向 project.tasks 添加一个侦听器(通过您的插件),以便每当将名为 copyLibs 的任务添加到项目中时,你可以注册你的依赖。

project.tasks.whenTaskAdded { task ->
  if (task.name == 'copyLibs') {
    MyTask.dependsOn(task)
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2021-08-04
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多