避免类似摇篮任务之间的重复?(Avoid duplication between similar G

2019-08-01 22:31发布

它有什么办法避免同一类型的两个相似的任务之间的配置重复?

例如,我想创建一个debugSomething任务,与相同配置runSomething以下但增加远程调试器参数的jvmArgs的:

task runSomething(dependsOn: jar, type: JavaExec, group: "Run") {
    jvmArgs "-Xmx1024m", "-XX:MaxPermSize=128m"
    main = "com.some.Main"
    classpath = sourceSets.main.runtimeClasspath
}

Answer 1:

我发现,使用Task.configure方法是集中逻辑是这样非常有帮助。

我没有测试过,但在你的情况下,这可能是这样的:

def commonSomething = {
    main = "com.some.Main"
    classpath = sourceSets.main.runtimeClasspath
    jvmArgs "-Xmx1024m", "-XX:MaxPermSize=128m"
}

task runSomething(dependsOn: jar, type: JavaExec, group: "Run") {
    configure commonSomething
}

task debugSomething(dependsOn: jar, type: JavaExec, group: "Run") {
    configure commonSomething
    jvmArgs ...add debug arguments...
}


Answer 2:

这可以使用普通的Groovy来解决:

task runSomething(dependsOn: jar, type: JavaExec, group: "Run") {
}

task debugSomething(dependsOn: jar, type: JavaExec, group: "Run") {
    jvmArgs "-agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=y"
}

[runSomething, debugSomething].each { task ->
    task.main = "com.some.Main"
    task.classpath = sourceSets.main.runtimeClasspath
    task.jvmArgs "-Xmx1024m", "-XX:MaxPermSize=128m"
}

即使debugSomething.jvmArgs被调用两次,所有三个参数提供给JVM。

单参数可以使用Groovy的设置传播操作 :

[runSomething, debugSomething]*.main = "com.some.Main"


Answer 3:

请参阅本手册的部分51.2 。 AFAICT,它显示正是你想要的。



Answer 4:

我一直在寻找与我不想共享相同类型的所有任务之间的配置,但仅限于一些人的差别类似的东西。

我试着像在接受的答案说,它不工作很好,但。 我会再试。

正如我已经在这里了,我不介意分享,有(至少目前)更好,摇篮内置的方式来实现它在这里问的东西。 它是这样:

tasks.withType(JavaExec) {
    jvmArgs "-Xmx1024m", "-XX:MaxPermSize=128m"
    main = "com.some.Main"
    classpath = sourceSets.main.runtimeClasspath
}

这样,所有的任务JavaExec类型将收到能明显由同一类型的任何特定的任务来改变默认的配置。



文章来源: Avoid duplication between similar Gradle tasks?
标签: gradle