带有2个蚂蚁目标的Gradle任务 - 试图结合蚂蚁目标以加快执行时间



我当前有一个使用2个蚂蚁目标(复制和移动)的Gradle任务。这两个蚂蚁任务给了我正确的结果。但是,我想知道是否可以将它们加入一个蚂蚁目标,以加快执行时间并减少代码的数量。

我试图用2个映射器来做到这一点,但是显然我只能使用一个映射器。我试图使用CharedMapper和ComposItemapper,但结果不是我所期望的。

我想要的

我有一些我需要更改其所有扩展名(.icls -> .xml)的文件,并且我有一个我想重命名 (ChroMATERIAL IntelliJ IDEA -> ChroMATERIAL)

的文件
Starting file name                    final file name
------------------                    ---------------
ChroMATERIAL - Darker.icls        ->  ChroMATERIAL - Darker.xml
ChroMATERIAL - Darcula.icls       ->  ChroMATERIAL - Darcula.xml
ChroMATERIAL IntelliJ IDEA.icls   ->  ChroMATERIAL.xml

下面的代码是我在收到错误消息之前最初要使用的代码。最后,代码是我当前使用的解决方法。

编辑:我确实更喜欢基于蚂蚁的成绩任务。我研究了似乎允许多个映射器的纯蚂蚁文件,这就是我认为需要的,但是我无法获得类似的工作。

我尝试的

task syncFiles {
    doLast {
        // Sync files from IntelliJ's color scheme and rename extension
        ant.copy(todir: sourceDir) {
            ant.fileset(dir: intelliJColorSchemeDir)
            // NOTE: This is an error message. Can only have one mapper!
            ant.mapper(type: "glob", from: "*.icls", to: "*.xml")
            ant.mapper(type: "glob", from: "ChroMATERIAL IntelliJ IDEA.xml", to: "ChroMATERIAL.xml")    
        }
    }
}

我当前的实施

这就是我想与2个映射器一起变成一个蚂蚁任务。我相信这可以将其变成仅调用ant一次的较小代码。我希望此代码也更快地执行。

task syncFiles {
    doLast {
        // Sync files from IntelliJ's color scheme and rename extension
        ant.copy(todir: sourceDir) {
            ant.fileset(dir: intelliJColorSchemeDir)
            ant.mapper(type: "glob", from: "*.icls", to: "*.xml")
        }
        // Rename one specific file. I want this mapper to be joined with the above mapper
        ant.move(todir: sourceDir) {
            ant.fileset(dir: sourceDir)
            ant.mapper(type: "glob", from: "ChroMATERIAL IntelliJ IDEA.xml", to: "ChroMATERIAL.xml")
        }
    }
}
task syncFiles(type: Copy) {
    into sourceDir
    with copySpec {
       from intelliJColorSchemeDir
       include '**/ChroMATERIAL IntelliJ IDEA.icls'
       rename '.*', 'ChroMATERIAL.xml'
    }
    with copySpec {
       from intelliJColorSchemeDir
       exclude '**/ChroMATERIAL IntelliJ IDEA.icls'
       rename '(.*)\.icls$', '$1.xls'
    }
}

依靠原始问题并提供基于蚂蚁的解决方案,以下代码似乎是最干净的。可能还有其他类型的复合映射器的性能更好,但这是我可以提出的。

    ant.copy(todir: sourceDir) {
        ant.fileset(dir: intelliJColorSchemeDir)
        ant.firstmatchmapper {
            ant.globmapper(from: "ChroMATERIAL IntelliJ IDEA.icls", to: "ChroMATERIAL.xml")
            ant.globmapper(from: "*.icls", to: "*.xml")
        }
    }

我喜欢的东西。该代码非常干净,不使用奇怪的语法,例如正则是Regex。它还将映射器结合到一个街区中。最后,它像我最初想要的那样使用蚂蚁。

执行一些快速测试似乎显示出执行时间的变化很小,但是我已经报告了使用上述代码为此任务的一些最快的执行时间。不知道那是氟还是稍高。

编辑:

这是仅使用gradle的清晰简洁版本...

into sourceDir
from intelliJColorSchemeDir, {
    rename 'ChroMATERIAL IntelliJ IDEA.icls','ChroMATERIAL.xml'  // Edit: moved to top and changed file extension.
    rename '(.*)\.icls$', '$1.xml'
}

此代码实际上在每次运行中都更快。

最新更新