gpt4 book ai didi

java - Gradle java项目在构建期间替换文件中的单行

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:16:12 25 4
gpt4 key购买 nike

我有一个简单的 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/

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