3

Gradle ビルドで、ファイルをリモート ホストにコピーするための再利用可能な関数を定義したいと考えています。scp関数内でAnt タスクを使用したいと考えています。以下のコードは動作します:

def remoteCopy(todir) {
    ant.scp(
            todir: todir,
            passphrase: XXXXXXXX,
            keyfile: XXXXXXXX) {
        fileset(dir: 'config') {           // I want this to be passed
            include(name: '**/*.txt')      // in as a parameter to the
        }                                  // function
    }
}

task example {
    remoteCopy('user@host:/home/xxxxxxx/')
}

ただし、remoteCopy 関数内にファイルセットをハードコーディングしたくありません。このような関数を呼び出すことができるようにしたい (この構文が可能な場合):

remoteCopy('user@host:/home/xxxxxxx/') {
    ant.fileset(dir: 'config') {
       include(name: '**/*.txt')
    }
}

または、おそらく 2 番目のパラメーターとして:

remoteCopy('user@host:/home/xxxxxxx/',
    ant.fileset(dir: 'config') { include(name: '**/*.txt') } )

Groovy や Gradle を知っている人は助けてくれますか?


完全を期すために、再現しやすくするためにscp、Gradle スクリプト内で Ant タスクを初期化する方法を次に示します。

configurations { ant_jsch }

repositories { mavenCentral() }

dependencies { ant_jsch 'org.apache.ant:ant-jsch:1.8.1' }

ant.taskdef(name: 'scp',
    classname: 'org.apache.tools.ant.taskdefs.optional.ssh.Scp',
    classpath: configurations.ant_jsch.asPath)
4

1 に答える 1

4

これは機能しますか?

def remoteCopy( todir, Closure fset ) {
  ant.scp( todir: todir, passphrase: XXXXXXXX, keyfile: XXXXXXXX) {
    fset()
  }
}

remoteCopy( 'user@host:/home/xxxxxxx/' ) {
  ant.fileset( dir: 'config' ) {
    include( name: '**/*.txt' )
  }
}
于 2012-08-03T14:51:21.573 に答える