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

标签 java build gradle

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

相关文章:

java - Gradle 任务 assembleDebug 失败,退出代码为 1(运行时异常)

java - 如何使用 apache httpclient fluent 4.3.2 在请求中设置字符集

android - 如何更改 Android 项目的目标构建?

docker build 错误检查上下文 : 'can' t stat '\\?\C:\Users\username\AppData\Local\Application Data' '

java.lang.NoSuchMethodError : javax. servlet.http.Cookie.setHttpOnly(Z)V

android - 尝试同步 gradle 时无法加载类 'kotlin.collections.CollectionsKT' 错误

java - Gradle获取其他项目的jar文件路径

java - Hibernate:级联问题

java - 在java中将字符数组转换为对象数组?是否可以?

c++ - 将 CMake 与同一语言的多个编译器一起使用