我有一个Gradle构建脚本,可以成功构建我的项目并编译我需要的所有工件。
但是,在某些情况下,我想让其他开发人员可以选择修补某些文件。例如,在其中一个档案中,有一个xml文件,其中包含有关数据库挂钩的信息-一些开发人员使用其他版本(甚至引擎),并且在使用生成输出之前需要对其进行更改。
我不想让他们更改可能会错误提交的版本控制文件,而是让他们选择拥有构建脚本适用的本地单个补丁文件。
在旧的蚂蚁脚本中,我们做了这样的事情
<target name="appcontext-patch" if="applicationContext.patch.file">
<patch patchfile="${applicationContext.patch.file}" originalfile="${dist.dir}/applicationContext.xml"/>
</target>
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何在Gradle中做到这一点。是否有比尝试直接将其转换为to更好的(即更惯用的)方法ant.patch?
一些上下文
这是文件首先如何在存档中结束的方式:
into('META-INF') {
from 'deployment', {
include 'applicationContext.xml'
rename { fn -> "jboss-spring.xml" }
}
}
Run Code Online (Sandbox Code Playgroud)
这将是fantabulous如果我可以做这样的事情
into('META-INF') {
from 'deployment', {
include 'applicationContext.xml'
rename { fn -> "jboss-spring.xml' }
patch 'local/applicationContext.xml.patch'
}
}
Run Code Online (Sandbox Code Playgroud)
并在将文件放入存档之前应用补丁文件。我不介意编写一些代码来实现这一目标,但是我对Gradle还是很陌生,我也不知道从哪里开始。
您应该能够将您的蚂蚁电话直接转换为gradle。
关于如何执行此操作的gradle文档。基本上,属性成为命名参数,子标记成为闭包。该文档有很多很好的例子。
一旦完成翻译后的蚂蚁任务,就可以在适当的任务中放入doFirst或doLast块。
我的第一个猜测是这样的:
apply plugin: 'java'
assemble.doFirst {
ant.patch(patchfile: applicationContext.patch.file,
originalFile: "${dist.dir}/applicationContext.xml")
}
Run Code Online (Sandbox Code Playgroud)
这未经测试,所以我敢肯定,它将使您从正确的道路入手。目的是在java插件组装档案文件之前,您要gradle调用闭包。在这种情况下,闭包将执行对XML进行修补的ant操作。
或者,您可以使用上面执行的任务,在该任务上执行复制和标记。
task myCopyTask(type: Copy) {
...
} << {
ant.patch(patchfile: applicationContext.patch.file,
originalFile: "${dist.dir}/applicationContext.xml")
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以自己编写任务,而左移运算符(<<)则相当.doLast酷。我不确定您喜欢哪种方法,但是如果您已经有一个复制任务首先将文件放在那儿,我认为doLast会使相关的代码块尽可能地靠近彼此。
| 归档时间: |
|
| 查看次数: |
2761 次 |
| 最近记录: |