【问题标题】:Gradle: Why is the ANT jar-task faster?Gradle:为什么 ANT jar-task 更快?
【发布时间】:2013-11-12 10:50:18
【问题描述】:

我有两种方法可以用 gradle 创建一个胖罐子:

通过使用 ant 任务:

    jar {
       doLast {
          ant.jar(destFile: jar.archivePath, update: 'true') {
             configurations.compile.files.each { file ->
                zipfileset(src: file) {
                   exclude(name: '**/META-INF/maven')
                   exclude(name: '**/META-INF/maven/**/*')
                   exclude(name: '**/templates')
                   exclude(name: '**/about_files')
                   exclude(name: '**/about_files/**/*')
                   exclude(name: '**/*html')
                   exclude(name: '**/*readme*')
                   exclude(name: '**/*txt')
                   exclude(name: '**/*inf')
                   exclude(name: '**/*SF')
                   exclude(name: '**/*RSA')
                   exclude(name: '**/*.vm')
                   exclude(name: '**/empty.file')
                }
             }
          }
       }
    }

通过使用gradle方式:

    jar {
       dependsOn configurations.compile
       from (configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
          exclude '**/META-INF/maven'
          exclude '**/META-INF/maven/**/*'
          exclude '**/templates'
          exclude '**/about_files'
          exclude '**/about_files/**/*'
          exclude '**/*html'
          exclude '**/*readme*'
          exclude '**/*txt'
          exclude '**/*inf'
          exclude '**/*SF'
          exclude '**/*RSA'
          exclude '**/*.vm'
          exclude '**/empty.file'
       }
    }

两个任务都会创建一个相同的 jar 文件。但是第一种方法需要 20 秒,第二种方法需要 3 分钟。

为什么第一个更快?除了执行时间:哪一个是“更清洁”的解决方案?还是有更聪明的方法来完成这项工作?

【问题讨论】:

  • 正在使用 gradle 作为 ant - 定义所有步骤 - 复制资源、编译、jar?

标签: java ant gradle


【解决方案1】:

前一个任务缺少dependsOn configurations.compile,这可以解释为什么执行这个任务更快。另一个主要区别是,仅对于第二个任务,任务输入被正确声明(即 Gradle 可以可靠地确定任务是否为 up-to-date),如果 configurations.compile 中的文件很大,这可能需要一段时间。

PS:第二个任务应该使用from { configurations.compile.collect { ... } }以避免在配置阶段做工作。这将加快不涉及该任务的构建调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多