首页 > 解决方案 > 尝试使用 groovy DSL 替换文件中的字符串

问题描述

我想将VERSION文件中的占位符替换为变量version值,但遇到以下错误:

def versions = ["8.8.0", "9.9.0"]
versions.each { version ->
    def file = new File("$Path/test.url")
        def fileText = file.replaceAll("VERSION", "${version}")
            file.write(fileText);

错误:

groovy.lang.MissingMethodException: No signature of method: java.io.File.replaceAll() is applicable for argument types: (java.lang.String, org.codehaus.groovy.runtime.GStringImpl) values: [VERSION, 8.8.0]

我是groovy dsl的新手,不知道我错过了什么,任何建议,不胜感激!

标签: groovyjenkins-groovyjenkins-job-dsl

解决方案


另一种方法是使用 groovy 文件.text属性:

def f = new File('sample-file.txt')
f.text = f.text.replaceAll('VERSION', '8.8.0')

就像@cfrick 提到的那样,在多个版本上执行替换操作没有多大意义,因为只有第一个版本会真正找到VERSION字符串。

在示例文件上运行上述内容:

─➤ groovy solution.groovy
─➤ 

将导致字符串被替换:

─➤ diff sample-file.txt_original sample-file.txt
1c1
< Dolore magna aliqua. VERSION Ut enim ad minim veniam.
---
> Dolore magna aliqua. 8.8.0 Ut enim ad minim veniam.

哪里diff是比较两个文件的linux工具。


推荐阅读