我有一个简单的Gradle构建脚本来编译和打包(类似于应用程序插件)我的Java应用程序.我唯一没有做的就是在一个简单的.properties文件中替换当前版本号.
我用单行'application.version = @ version @'创建了一个文件'src/main/resources/app-info.properties'.不,只要将文件复制到构建文件夹,我想替换此版本字符串(认为这在构建任务期间发生).
我已经尝试过使用蚂蚁ReplaceTokens的简单解决方案.这个替换了版本,但也破坏了资源中的.png文件.
那么有一个简单的解决方案,只需在构建任务期间(或任何处理复制到构建文件夹的任务)替换单个文件中的令牌吗?
感谢您的任何帮助!本
======根据Opal的评论进行编辑=====
根据提示,我添加了以下内容:
import org.apache.tools.ant.filters.ReplaceTokens
// ...
build {
from('src/main/resources') {
include '*.properties'
filter(ReplaceTokens, tokens: [version : project.version])
}
}
Run Code Online (Sandbox Code Playgroud)
这引发了这个错误:
无法在根项目中找到来自()的参数[src/main/resources,build_vbjud9ah7v3pj5e7c5bkm490b $ _run_closure6_closure12 @ 43ead1a8]的方法
好像我在做错了什么?
======编辑完整性添加基于Opals建议的解决方案=====
谢谢你,以下是工作解决方案!
processResources {
from('src/main/resources') {
include '*.properties'
filter(ReplaceTokens, tokens: [version : project.version])
}
}
Run Code Online (Sandbox Code Playgroud)
书籍和博客都很相似,包括Opal的答案都建议使用生动的混合物exclude/include,from()和filter().当然还有,所以我做了我的第一次尝试的文本替换{{app javascript library}}的index.html文件,其依赖于一个简单的项目属性设置一个JavaScript库的路径.
让我感到困惑的是,我的"战争"任务在war存档中产生了重复的index.html文件,并且使用前面描述的模式摆脱了问题,导致了一个巨大的难以理解的黑客攻击.
然后我找到了一个非常直接的解决方案.以下示例来自我自己的构建脚本,您必须自定义它以满足您的需求:
war {
eachFile { copyDetails ->
if (copyDetails.path == 'index.html') {
filter { line ->
line.replace('{{app javascript library}}', "lib/someLib.js")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11408 次 |
| 最近记录: |