Gradle可以生成POM,使其不会不必要地触摸输出文件吗?

时间:2017-07-11 01:55:38

标签: gradle pom.xml

我们正在创建一个像这样的POM文件:

task createPom {
   doLast {
      pom {
         project {
            groupId project.group
            artifactId project.name
            version project.ext.pomVersion
         }
      }.writeTo("${buildDir}/pom.xml")
   }
}

即使没有发生任何更改,这个writeTo也急切地写入文件,这会导致jar发生变化,因此后来构建中的昂贵任务(索引,签名,构建安装程序)也必须运行。

我想过要写一个临时文件并以某种方式对这两个文件进行区分,但似乎我必须编写很多样板来做到这一点,所以我想知道是否有一个正确的方法。

1 个答案:

答案 0 :(得分:2)

您需要做的是配置任务inputs and outputs,用于确定您的任务是否是最新的。在这里,应该如何做:

apply plugin: 'maven'

ext {
  pomVersion = '3.1.4.5'
}

group = 'lolgroup'

task createPom {
  outputs.file "${buildDir}/pom.xml"
  inputs.property('group', project.group)
  inputs.property('name', project.name)
  inputs.property('pomVersion', project.ext.pomVersion)

  doLast {
    pom {
      project {
        groupId inputs.properties['group']
        artifactId inputs.properties['name']
        version inputs.properties['pomVersion']
      }
    }.writeTo("${buildDir}/pom.xml")
  }
}

Here你可以找到一个演示。