Gradle 能否以一种不会不必要地触及输出文件的方式生成 POM?

Posted

技术标签:

【中文标题】Gradle 能否以一种不会不必要地触及输出文件的方式生成 POM?【英文标题】:Can Gradle generate a POM in such a way that it doesn't unnecessarily touch the output file? 【发布时间】: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 发生更改,因此后续构建中昂贵的任务(索引、签名、构建安装程序)都必须运行。

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

【问题讨论】:

【参考方案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)

以上是关于Gradle 能否以一种不会不必要地触及输出文件的方式生成 POM?的主要内容,如果未能解决你的问题,请参考以下文章

CMake - 不必要地构建两次对象?

如何更正括号的添加以不必要地使用括号python3

为啥我的 hdf5 文件看起来如此不必要地大?

.htaccess:使用 RewriteCond 但对 IMAGES/JS/CSS 文件的hrefs仍然被不必要地重写[重复]

为什么GWT wrap()方法不必要地迭代整个DOM?

XCTest:如果我只是对测试目标进行更改,如何防止 Xcode 不必要地重新编译我的项目