Не удается добавить переменную среды в pom.xml файл с groovy

#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>