我有一个简单的 Gradle 构建脚本来编译和打包(类似于应用程序插件)我的 Java 应用程序。我唯一没有完成的是在一个简单的 .properties 文件中替换当前版本号。
我创建了一个文件“src/main/resources/app-info.properties”,其中只有一行“application.version = @version@”。不,我想在文件复制到构建文件夹时替换此版本字符串(认为这是在构建任务期间发生的)。
我已经用 ants ReplaceTokens 尝试了一个简单的解决方案。这个替换了版本,但也破坏了资源中的 .png 文件。
那么是否有一种简单的解决方案可以在构建任务期间(或任何处理复制到构建文件夹的任务)替换单个文件中的标记?
感谢您的帮助! 本
====== 根据 Opal 的评论编辑 =====
根据提示,我添加了以下内容:
import org.apache.tools.ant.filters.ReplaceTokens
// ...
build {
from('src/main/resources') {
include '*.properties'
filter(ReplaceTokens, tokens: [version : project.version])
}
}
抛出这个错误:
Could not find method from() for arguments [src/main/resources, build_vbjud9ah7v3pj5e7c5bkm490b$_run_closure6_closure12@43ead1a8] on root project
我似乎做错了任务?
====== 为完整性而编辑添加基于 Opals 建议的解决方案 =====
谢谢,下面是可行的解决方案!
processResources {
from('src/main/resources') {
include '*.properties'
filter(ReplaceTokens, tokens: [version : project.version])
}
}
最佳答案
类似的书籍和博客,包括来自 Opal 的答案,都建议使用 exclude/include
的生动混合。 , from()
和 filter()
.当然,我第一次尝试替换文本时也是如此 {{app javascript library}}
在index.html
文件到依赖于简单项目属性设置的 JavaScript 库的路径。
我遇到的问题是,我的“war”任务在 war 存档中生成了重复的 index.html 文件,为了解决这个问题,使用前面描述的模式,导致了一个巨大的不可读的 hack。
然后我找到了一个非常直接的解决方案。以下示例来 self 自己的构建脚本,您必须对其进行一些自定义以满足您的需求:
war {
eachFile { copyDetails ->
if (copyDetails.path == 'index.html') {
filter { line ->
line.replace('{{app javascript library}}', "lib/someLib.js")
}
}
}
}
关于java - Gradle java项目在构建期间替换文件中的单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24231207/