14

実行中にExecに変数を渡すにはどうすればよいですか? 現在のビルド コマンドを実行するパス スルー gradle ファイルを作成したいと考えています。これにより、構成をビルド サーバー プランからソース管理管理の build.gradle ファイルに移動できます。これは、より大きなプロジェクトに備えて gradle を知ることの一部でもあります。

構成にさまざまな変数を使用してコマンドを実行したいと考えています。Ant では、プロパティを設定し、ネストされた env ブロックを介して exec に渡します。Gradleでは、タスクの環境とマージするマップを作成していますが、これは機能していません。

'<<' を checkenv に追加できないため、タスク コードは、入力される前に buildEnvironmentVariables を実行するか、間違ったスコープにあります。適切なタスク構成に従っていないことはわかっています。

提案を提供するか、マニュアル/ドキュメントの適切な部分を教えてください。

build.gradle - gradle checkenv の実行

def buildEnvironmentVariables = [:]
task setEnv() << {
    buildEnvironmentVariables['JAVA_OPTS']="-XX:ErrorFile=foo/logs" 
}

task checkenv(dependsOn: 'printEnv', type:Exec) {
    workingDir '../..'
    executable = 'cmd'
    environment << buildEnvironmentVariables
    println "buildEnvironmentVariables = " << buildEnvironmentVariables['JAVA_OPTS']
    args = ['/c','set','JAVA_OPTS']
}

プロジェクトにタスクを追加するのは、それが「ターゲット」に相当し、最上位タスク内の exec のようなアクションをカプセル化する場合に限るべきですか?

追加されたタスクはアリのターゲットのようなもので、カプセル化されたタスクはアリのタスクのようなものですか?

def buildEnvironmentVariables = [:]
task setEnv() << {
    buildEnvironmentVariables['JAVA_OPTS']="-XX:ErrorFile=foo/logs" 
}

task checkenv(dependsOn: 'printEnv') << {
    println "buildEnvironmentVariables = " << buildEnvironmentVariables['JAVA_OPTS']
    ext.check = exec() {
        workingDir '../..'
        executable = 'cmd'
        environment << buildEnvironmentVariables
        args = ['/c','set','JAVA_OPTS']
    }
}

ありがとう

4

2 に答える 2

33

白紙の状態から始める方がおそらく良いでしょう:

task doSomething(type: Exec) {
    workingDir ...
    executable ...
    args ...
    environment JAVA_OPTS: "-XX:ErrorFile=foo/logs"
}

その後、このタスクを で実行できますgradle doSomething。これはあなたの目標を達成していますか?

于 2012-10-05T21:12:44.000 に答える
6

わかりました。これが、PeterN.が提案したパターンを使用して最終的にたどったコースです。

  • OSとArchを検出するためのルーチンを定義/使用する
  • 構成中のすべてのexecタスクの構成環境へのメソッド
  • execタスクの例

........。

import org.apache.tools.ant.taskdefs.condition.Os

def is64Arch() {
    return System.properties['os.arch'].toLowerCase().contains('64')
}

task configureEnvironment() {
    def envVars = [:]


    envVars['JAVA_OPTS']="-Dlog.directory=target/logs -Djava.awt.headless=true -XX:ErrorFile=target/logs"

    if (is64Arch()) 
    {
        envVars['JAVA_OPTS'] +=" -Xmx2048m -XX:MaxPermSize=768m" 
        println "*** ARCH: 64"
    }
    else
    {
        envVars['JAVA_OPTS'] +=" -Xmx1792m -XX:MaxPermSize=512m" 
        println "*** ARCH: 86"
    }

    tasks.withType(Exec) { environment << envVars }

}


task checkJavaEnvVars(type:Exec)  {
    workingDir '../..'
    commandLine 'cmd','/c','set JAVA'
}
于 2012-10-09T20:40:12.693 に答える