Gradle 能否以不会不必要地触及输出文件的方式生成 POM?
Can Gradle generate a POM in such a way that it doesn't unnecessarily touch the output file?
我们正在创建一个 POM 文件,如下所示:
task createPom {
doLast {
pom {
project {
groupId project.group
artifactId project.name
version project.ext.pomVersion
}
}.writeTo("${buildDir}/pom.xml")
}
}
这个 writeTo
即使没有发生任何变化也会急切地写入文件,这会导致 jar 发生变化,因此以后构建中的昂贵任务(索引、签名、构建安装程序)都必须 运行 还有。
我想过写入一个临时文件并以某种方式区分这两个文件,但似乎我必须为此编写很多样板文件,所以我想知道是否有合适的方法去做吧。
您需要做的是配置任务的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 文件,如下所示:
task createPom {
doLast {
pom {
project {
groupId project.group
artifactId project.name
version project.ext.pomVersion
}
}.writeTo("${buildDir}/pom.xml")
}
}
这个 writeTo
即使没有发生任何变化也会急切地写入文件,这会导致 jar 发生变化,因此以后构建中的昂贵任务(索引、签名、构建安装程序)都必须 运行 还有。
我想过写入一个临时文件并以某种方式区分这两个文件,但似乎我必须为此编写很多样板文件,所以我想知道是否有合适的方法去做吧。
您需要做的是配置任务的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 你可以找到一个演示。