【问题标题】:Can Gradle generate a POM in such a way that it doesn't unnecessarily touch the output file?Gradle 能否以一种不会不必要地触及输出文件的方式生成 POM?
【发布时间】:2017-12-14 21:39:53
【问题描述】:

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

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

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

我考虑过写入一个临时文件并以某种方式区分这两个文件,但似乎我必须编写很多样板才能做到这一点,所以我想知道是否有合适的方法去关于它。

【问题讨论】:

    标签: gradle pom.xml


    【解决方案1】:

    您需要做的是配置任务的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你可以找到一个演示。

    【讨论】:

    • 啊哈,所以有一种方法可以任意输入。我假设我还必须放入一些东西,让它知道如果依赖关系也发生变化,它必须重新制作 pom,并且我也可以为此使用属性。
    • 好的,缺少的似乎是:inputs.property('generatedDependencies', model.generatedDependencies)
    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多