14

コピー中にgradleはツリーの構造を変更できますか?

オリジナル

  • mod/a/src
  • mod/b/src

希望

  • dest/mod-a/ソース
  • dest/mod-b/ソース
  • dest/mod-c/ソース

どこでクロージャを作成し、コピー ツリー ロジックをオーバーライドする必要があるのか​​ わかりません

ant の globmapper 機能に相当する gradle を実行したい

<property name="from.dir" location=".."/>      
<property name="to.dir" location="dbutil"/>
<copy>
    <fileset dir="${from.dir}" ... />
    <globmapper from="${from.dir}/*/db" to="${to.dir}"/> 
</copy>

ありがとう

ピーター

4

3 に答える 3

24

ファイル名を変更するときは、名前を変更することをお勧めします。パスを変更するときは、 eachFileをオーバーライドして、宛先パスを変更できます。

これはかなりうまくいきます。

    copy {
    from("${sourceDir}") {
        include 'modules/**/**'
    }
    into(destDir)
    eachFile {details ->

        // Top Level Modules
        def targetPath = rawPathToModulesPath(details.path)
        details.path = targetPath
    }
}
....
def rawPathToModulesPath(def path) {
// Standard case modules/name/src -> module-name/src
def modified=path.replaceAll('modules/([^/]+)/.*src/(java/)?(.*)', {"module-${it[1]}/src/${it[3]}"})
return modified
}
于 2012-11-09T22:25:26.933 に答える
1

以下は機能しますが、これを行うためのよりgradleっぽい方法はありますか?

    ant.copy(todir: destDir) {
      fileset( dir: "${srcDir}/module", includes: '**/src/**')
      regexpmapper(from: '^(.*)/src/(.*)$', to: /module-\1\/src\/\2/)
    }
于 2012-11-08T20:49:56.243 に答える