Groovy:如何将操纵的字符串定义为变量?

Ita*_*not 6 groovy jenkins jenkins-pipeline

我正在编写一个Jenkins管道作为Android应用程序的代码.

我有以下字符串:

BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
Run Code Online (Sandbox Code Playgroud)

我想定义另一个名为artifact_name的变量,它看起来像:

product_name-BUILDFLAV(in lowercase)-BUILDTYPE(in lowercase).apk
Run Code Online (Sandbox Code Playgroud)

例如:

App01-staging-debug.apk
Run Code Online (Sandbox Code Playgroud)

因为我是groovy的新手,所以我不确定我是否正确地做到了.

我已经定义了2个变量:

aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
Run Code Online (Sandbox Code Playgroud)

这允许我将每个字符串的第一个字符从大写更改为小写.

然后,我希望artifact_name变量看起来像这样:

App01-$(aa}-${bb}.apk
Run Code Online (Sandbox Code Playgroud)

所以我尝试过这样的事情:

artifact_name = "App01-${BUILDFLAV[0]}.toLowerCase()+${BUILDFLAV}.substring(1)+${BUILDTYPE[0]}.toLowerCase()+${BUILDTYPE}.substring(1).apk"
Run Code Online (Sandbox Code Playgroud)

但它给我一个错误.

但是,这样做有效,但似乎有更优雅的方法:

BUILDFLAV = "Staging"
BUILDTYPE = "Debug"
aa = BUILDFLAV[0].toLowerCase()+BUILDFLAV.substring(1)
bb = BUILDTYPE[0].toLowerCase()+BUILDTYPE.substring(1)
ARTIFACT_NAME = "App01-${aa}-${bb}.apk"
Run Code Online (Sandbox Code Playgroud)

如果你问自己为什么我不是从一开始就用小写设置变量是因为在构建中运行的gradle任务是使用第一个字母大写约定而我想要实现的是与更高级的步骤有关构建.

是否有可能通过在vars"aa"和"bb"中仅用一行来完成相同的结果?像上面带有artifact_name的例子...

Rik*_*Rik 10

如果你想在groovy中使用字符串中的模板,你可以${..}像往常一样把它放在里面.但是,您需要将需要执行的所有内容放入其中.

所以使用

ARTIFACT_NAME = "App01-${BUILDFLAV[0].toLowerCase()}${BUILDFLAV.substring(1).toLowerCase()-${BUILDTYPE[0].toLowerCase()}${BUILDTYPE.substring(1).toLowerCase()}.apk"`
Run Code Online (Sandbox Code Playgroud)

但请注意,没有必要将第一个char转换为小写,然后附加其余的char.接下来会给出相同的结果

`ARTIFACT_NAME = "App01-${BUILDFLAV.toLowerCase()}-${BUILDTYPE.toLowerCase()}.apk"`
Run Code Online (Sandbox Code Playgroud)

如果你出于某种原因想要这样做,你可以使用BUILDTYPE[1..-1]而不是BUILDTYPE.substring(1)