5

ANTビルドにあるタスクをGradleに変換しようとしています:

<target name="index-assets" depends="copy-assets">
    <path id="assets.path">
        <!-- contexts (and surplus) -->
        <dirset id="assets.dirset" dir="assets/" defaultexcludes="yes"/>
        <!-- assets -->
        <fileset id="assets.fileset" dir="assets/" includes="**" excludes="asset.index" defaultexcludes="yes"/>
    </path>

    <pathconvert pathsep="${line.separator}" property="assets" refid="assets.path" dirsep="/">
        <mapper>
            <globmapper from="${basedir}/assets/*" to="*" handledirsep="yes"/>
        </mapper>
    </pathconvert>

    <echo file="assets/asset.index">${assets}</echo>

</target>

<target name="-pre-build" depends="index-assets"/>

私はまだGradleの基本的な概念を完全には理解していないと思いますが、私が試したことは次のとおりです。

task indexAssets << {

def assets = file("assets")
def contexts = files(assets)
inputs.file(assets)
outputs.file("assets/assets-gradle.index")

def tree = fileTree(dir: 'assets', include: ['**/*'], exclude: ['**/.svn/**', 'asset.index'])

contexts.collect { relativePath(it) }.sort().each { println it }
tree.collect { relativePath(it) }.sort().each { println it }
}
  1. ツリーは問題ありませんが、ファイル (リーフ) パスのみが含まれています
  2. ただし、ディレクトリ(コンテキスト)の単純なクリーンリストを取得できないようです。他のいくつかのバリアント(ツリー、包含/除外)を試しましたが、そのディレクトリに単一のファイルを取得するか、ディレクトリ名自体を取得するか、何も取得しません。「資産」ディレクトリにあるディレクトリの簡単なリストが必要です。
  3. 今のところ、パスを印刷しようとしていますが、後でこれらをファイル (ANT のエコー ファイルなど) に書き込む適切な方法も知りたいと思います。

    更新:
    このグルーヴィーなスニペットはその部分 (+ svn フィルター) を実行しているようですが、このタスクを実行するより「Gradley」な方法を見つけたいと思います。後でビルド前の依存関係としてビルド バリアントのコンテキストで実行されます。(注: このハックでは、パスの一部として「プロジェクト」を指定する必要がありました。タスクのプロジェクト コンテキストにいないと思いますか?)

    def list = []
    def dir = new File("Project/assets")
    dir.eachDirMatch (~/^(?!\.svn).*/) { file ->
        list << file
    }
    
    list.each {
        println it.name
    }
    
4

1 に答える 1