Gradle能否以这样一种方式生成POM,即它不会';是否不必要地触摸输出文件?

Gradle能否以这样一种方式生成POM,即它不会';是否不必要地触摸输出文件?,gradle,pom.xml,Gradle,Pom.xml,我们正在创建一个POM文件,如下所示: task createPom { doLast { pom { project { groupId project.group artifactId project.name version project.ext.pomVersion } }.writeTo("${buildDir}/pom.xml") } }

我们正在创建一个POM文件,如下所示:

task createPom {
   doLast {
      pom {
         project {
            groupId project.group
            artifactId project.name
            version project.ext.pomVersion
         }
      }.writeTo("${buildDir}/pom.xml")
   }
}
writeTo
即使没有发生任何更改,也会急切地写入文件,这会导致jar发生更改,因此构建中后期昂贵的任务(索引、签名、构建安装程序)也必须运行


我曾考虑写入一个临时文件并以某种方式区分这两个文件,但似乎我必须编写大量的样板文件才能做到这一点,因此我想知道是否有一种正确的方法来实现这一点。

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

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")
  }
}

你可以找到一个演示

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

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")
  }
}

你可以找到一个演示

啊哈,所以有一种方法可以任意输入。我假设我还必须加入一些东西,让它知道如果依赖项也发生变化,它必须重新生成pom,并且我也可以使用一个属性。好的,缺少的一个似乎是:inputs.property('generatedDependencies',model.generatedDependencies)Aha,所以有一种方法可以获得任意输入。我假设我还必须加入一些东西,让它知道如果依赖项也发生变化,它必须重新生成pom,并且我也可以使用一个属性。好的,缺少的是:inputs.property('generatedDependencies',model.generatedDependencies)