#xml #maven #groovy
#xml #maven #groovy
Вопрос:
У меня есть 4 среды с именами dev
, sit
, uat
и prod
. Мне нужно обновить приведенный ниже тег с этим значением. $environments
ссылается на имя среды.
<am.userName>'${env.AM_$environments.toUpperCase()_SERVER_CREDS_USR}'</am.userName>
Но это возвращает ошибку как,
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.0.1:integration-test (default-integration-test) on project basic-wso2-archetype:
[ERROR] Archetype IT 'it-basic' failed: org.apache.maven.archetype.exception.ArchetypeGenerationFailure: Error merging velocity templates: Encountered "$environments" at archetype-resources/pom.xml[line 179, column 32]
[ERROR] Was expecting one of:
[ERROR] "[" ...
[ERROR] "}" ...
[ERROR]
В качестве обходного пути я попытался сделать это с помощью groovy script, как показано ниже, с заполнителем в качестве AM_SERVER_CREDS_USR
для замены значения.
def mainPomXml = new File(rootDir, '/pom.xml')
def mainPom = mainPomXml.text.replace('AM_SERVER_CREDS_USR', '${env.AM_' env.toUpperCase() '_SERVER_CREDS_USR}')
mainPomXml.write(mainPom)
Но вместо того, чтобы зацикливать среды, он изменяет все AM_SERVER_CREDS_USR
с первым значением цикла.
Как заставить работать любой из вышеперечисленных методов? или есть какой-либо другой способ выполнить эту задачу?
Комментарии:
1. Цикл, о котором вы говорите, не показан в вашем коде. Пожалуйста, предоставьте полный пример или, что еще лучше, минимальный пример, который просто показывает проблему (например, проблема, скорее всего, не зависит от maven)
Ответ №1:
Ошибка была вызвана первым $
здесь,
<am.userName>'${env.AM_$environments.toUpperCase()_SERVER_CREDS_USR}'</am.userName>
Итак, определите доллар как переменную в файле XML.
#set( $dollar = '$' )
Теперь обратитесь к переменной dollar в XML.
<am.userName>${dollar}{env.AM_$environment.toUpperCase()_SERVER_CREDS_USR}</am.userName>