groovy - 使用基本插件发布工件

标签 groovy gradle

我想使用基本插件发布一些 Artifact 。这是我的构建的样子:

apply plugin: 'base'

group = 'eu.com'
version = '0.9'

def winCdZip = file('dist/winCd.zip')

configurations {
    wincd
}

repositories {
    ivy  {
        url 'http://ivy.repo'
    }
}

artifacts {
    wincd winCdZip
}

buildscript {
    repositories {
        ivy  {
            url 'http://ivy.repo'
        }
    }
    dependencies {
        classpath group: 'eu.com', name:'MyCustomTask', version:'0.9-SNAPSHOT', configuration: 'runtime'
    }
}

buildWincd {
    // call MyCustomTask; is it possible to call it in this way?
    MyCustomTask {
        // pass few parameters required by this task
    }
    // I know that it's impossible to call zip in this way but I don't want to create another task
    zip {
        // build zip and save it in 'winCdZip'
    }
}

uploadWincd {
    repositories { add project.repositories.ivy }
}

这些是我要解决的问题:
  • 是否可以创建嵌套任务?
  • 是否可以在不创建新任务但关闭的情况下调用zip?
  • 是否可以使用闭包调用自定义任务(与第二点相同的示例)?

  • 我可以通过这种方式创建zip /自定义任务
    task myZip(type: Zip) {
        // do the job
    }
    

    可以这样称呼吗?
    zip {
        // do the job
    }
    

    如果无法使用闭包调用任务,该怎么办?创建新任务是唯一的方法吗?也许我可以创建嵌套任务?

    最佳答案

    您的问题的答案是“否”。 Gradle是一个声明式构建系统。您可以声明任务依赖关系,而不是让一个任务调用另一个任务,而Gradle将在执行过程中遵循该依赖关系。

    对于某些任务类型(例如Copy),有一个等效的方法(例如project.copy),但不是Zip。在大多数情况下,即使存在方法,也最好使用任务。

    Gradle User Guide的前几章详细解释了Gradle的核心概念,例如任务依赖性。

    关于groovy - 使用基本插件发布工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16954832/

    相关文章:

    jenkins - 在 Jenkins 管道中发送松弛消息时 cps 不匹配

    generics - 带有通用列表的 Groovy CompileStatic

    Jenkins管道条件阶段,使用 "When"作为选择参数

    java - 主要来源内的 Gradle 测试

    java - 访问另一个项目中的 Gradle 插件依赖项

    Groovy 拆分使用 file.separator

    spring - 处理grails中一对多关系的动态表单参数

    gradle - 使用 gradle 从 Nexus 获取 oracle JDBC jar

    android - gradle4.5编译错误:无法添加任务

    java - 使用@SpringBootTest Gradle 的 JUnit 初始化错误