gpt4 book ai didi

gradle - 如何在 Gradle 中应用补丁文件?

转载 作者:行者123 更新时间:2023-12-04 03:03:14 25 4
gpt4 key购买 nike

我有一个 Gradle 构建脚本,可以成功构建我的项目并编译我需要的所有工件。

但是,在某些情况下,我想为其他开发人员提供修补某些文件的选项。例如,在其中一个文件中有一个 xml 文件,其中包含有关数据库 Hook 的信息 - 一些开发人员使用其他版本(甚至引擎)并且需要更改这些版本才能使用构建输出。

我不想让他们更改可能会错误提交的版本控制文件,而是让他们选择拥有一个本地的、单独的补丁文件,构建脚本将应用该补丁文件。

在一个旧的 ant 脚本中,我们做了这样的事情

<target name="appcontext-patch" if="applicationContext.patch.file">
<patch patchfile="${applicationContext.patch.file}" originalfile="${dist.dir}/applicationContext.xml"/>
</target>

但我不知道如何在 Gradle 中做同样的事情。有没有比尝试直接将其转换为对 ant.patch 的调用更好(即更惯用)的方法? ?

一些上下文
这就是文件最初在存档中的结束方式:
into('META-INF') {
from 'deployment', {
include 'applicationContext.xml'
rename { fn -> "jboss-spring.xml" }
}
}

如果我能做类似的事情,那就太棒了
into('META-INF') {
from 'deployment', {
include 'applicationContext.xml'
rename { fn -> "jboss-spring.xml' }
patch 'local/applicationContext.xml.patch'
}
}

并在将文件放入存档之前应用补丁文件。我不介意编写一些代码来实现这一点,但我对 Gradle 很陌生,我不知道从哪里开始。

最佳答案

RFC 5621定义了一种 XML 修补语言,该语言使用 XPath 来定位文档中要修补的位置。它非常适合调整配置文件。
有一个open source implementation in Java (免责声明:我是作者)。它包括一个过滤器,可以在 Gradle 中用于在任何实现 CopySpec 的任务期间修补 XML 文件。例如:

buildscript {
repositories { jcenter() }
dependencies { classpath "com.github.dnault:xml-patch:0.3.0" }
}

import com.github.dnault.xmlpatch.filter.XmlPatch

task copyAndPatch(type: Copy) {
// Patch file in RFC 5621 format
def patchPath = 'local/applicationContext-patch.xml'

inputs.file patchPath

into('META-INF') {
from 'deployment', {
include 'applicationContext.xml'
rename { 'jboss-spring.xml' }
filter(XmlPatch, patch: patchPath)
}
}
}

关于gradle - 如何在 Gradle 中应用补丁文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17064086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com