26

同じタイプの 2 つの類似したタスク間で構成の重複を避ける方法はありますか?

debugSomethingたとえば、以下と同じ構成でタスクを作成したいと思いrunSomethingますが、jvmArgs にリモート デバッガー引数を追加します。

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

4 に答える 4

32

メソッドを使用すると、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...
}
于 2013-01-28T16:51:32.610 に答える
8

これは、プレーンな 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"
}

は 2 回呼び出されますdebugSomething.jvmArgsが、3 つの引数すべてが JVM に提供されます。

Groovy のSpread operatorを使用して、単一の引数を設定できます。

[runSomething, debugSomething]*.main = "com.some.Main"
于 2012-11-06T15:47:13.500 に答える
3

私は、同じタイプのすべてのタスク間で構成を共有したくないという違いがありますが、それらのいくつかについてのみ、似たようなものを探していました。

受け入れられた回答に記載されているようなことを試しましたが、うまくいきませんでした。もう一度やってみます。

私がここにいるので、共有しても構いません.(少なくとも今は)ここで尋ねられたことを達成するためのより良い、Gradleの組み込みの方法があります. 次のようになります。

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

このようにして、JavaExecタイプのすべてのタスクがデフォルトの構成を受け取ります。これは、同じタイプの特定のタスクによって明らかに変更できます。

于 2015-06-17T15:10:51.620 に答える
1

マニュアルのセクション 51.2 を参照してください。AFAICT、それはあなたが望むものを正確に示しています。

于 2012-10-25T15:54:05.140 に答える