我有一个 Gradle 构建脚本,可以成功构建我的项目并编译我需要的所有工件。
然而,在某些情况下,我想让其他开发人员可以选择修补某些文件。例如,在其中一个档案中有一个 xml 文件,其中包含有关数据库挂钩的信息 - 一些开发人员使用其他版本(甚至引擎),并且需要更改这些版本才能使用构建输出。
我不想让他们对版本控制的文件进行更改(他们可能会错误地提交这些文件),而是希望他们可以选择拥有构建脚本所应用的本地单独补丁文件。
在旧的蚂蚁脚本中,我们做了这样的事情
<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 还很陌生,我不知道从哪里开始。
您应该能够直接将 ant 调用转换为 gradle。
gradle 文档介绍了一般如何执行此操作。 http://www.gradle.org/docs/current/userguide/ant.html基本上,属性变成命名参数,子标签变成闭包。该文档有很多很好的例子。
一旦您完成了翻译后的 ant 任务,您就可以将其放入适当任务的 doFirst 或 doLast 块中。
我的第一个猜测是这样的:
apply plugin: 'java'
assemble.doFirst {
ant.patch(patchfile: applicationContext.patch.file,
originalFile: "${dist.dir}/applicationContext.xml")
}
这还没有经过测试,所以但我很确定它会让您走上正确的道路。目的是在 java 插件组装你的存档之前,你希望 gradle 调用一个闭包。在这种情况下,闭包将执行 ant 操作来修补您的 xml。
或者,您可以使用上面的任务来执行复制并对其进行标记。
task myCopyTask(type: Copy) {
...
} << {
ant.patch(patchfile: applicationContext.patch.file,
originalFile: "${dist.dir}/applicationContext.xml")
}
在这种情况下,您自己和左移运算符编写任务(<<
)相当于.doLast
但凉爽多了。我不确定您喜欢哪种方法,但如果您已经有一个复制任务首先将文件获取到那里,我认为 doLast 使相关代码块尽可能彼此靠近。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)