2016-03-23 8 views
0

私は、次のGradleのコードがあります。私が試したGradle Antタスクの共通コードをどのようにリファクタリングするのですか?

ant.jdiff(destdir: outputDir) { 
    old(name: "platform-${oldVersion}") { 
    oldVersionRoot.eachDirMatch({ dir -> 
     new File("${dir}/src").exists() 
    }) { dir -> 
     dirset(dir: "${dir}/src") 
    } 
    } 

    'new'(name: "platform-${currentVersion}") { 
    currentVersionRoot.eachDirMatch({ dir -> 
     new File("${dir}/src").exists() 
    }) { dir -> 
     dirset(dir: "${dir}/src") 
    } 
    } 
} 

final getSrcDirSets = { root -> 
    final result = [] 

    root.eachDirMatch({ dir -> 
    new File("${dir}/src").exists() 
    }) { dir -> 
    result.append(dirset(dir: "${dir}/src")) 
    } 

    result 
} 

ant.jdiff(destdir: outputDir) { 
    old(name: "example-${oldVersion}") { 
    getSrcDirSets(oldVersionRoot) 
    } 

    'new'(name: "example-${currentVersion}") { 
    getSrcDirSets(currentVersionRoot) 
    } 
} 

をそれが次のエラーが発生します。共通のコードがにリファクタリングすることができますどのように

Caused by: org.gradle.api.internal.MissingMethodException: Could not find method old() for arguments [{name=example-1.2.3}, build_at5jtticx[email protected]26f75d38] on task ':jdiff'. 

別の関数ですか?

答えて

0

DefaultAntBuilderのすべてのインスタンスが影響を受けるので、理想的ではないが、一つの方法として、Groovyのmonkeypatchingている:

ant.metaClass.jDiff_getSrcDirSets = { root -> 
    root.eachDirMatch({ dir -> 
    new File("${dir}/src").exists() 
    }) { dir -> 
    dirset(dir: "${dir}/src") 
    } 
} 

ant.property(name: "JDIFF_HOME", value: jdiffHome) 
ant.jdiff(
    destdir: outputDir, 
    verbose: 'off', 
    stats: 'on', 
    docchanges: 'off', 
    source: '1.8') { 
    old(name: "${project.name}-${oldVersion}") { 
    jDiff_getSrcDirSets(oldVersionRoot) 
    } 

    'new'(name: "${project.name}-${currentVersion}") { 
    jDiff_getSrcDirSets(currentVersionRoot) 
    } 
} 
関連する問題