#maven #environment-variables
#maven #переменные среды
Вопрос:
У меня есть настройка сборки, так что я передаю свою переменную через командную строку:
mvn clean install -DsomeVariable=data
В моем pom у меня есть:
<someTag>${someVariable}</someTag>
Это работает нормально, но я хотел бы определить, не указан ли someVariable в командной строке, а затем установить его по умолчанию, чтобы мой скрипт мог продолжить.
Можно ли это сделать в Maven?
Ответ №1:
Вы можете указать значение свойства по умолчанию в properties
разделе вашего файла POM:
<properties>
<someVariable>myVariable</someVariable>
</properties>
Если вы хотите убедиться, что значение свойства ВСЕГДА указывается в командной строке, вы можете использовать maven-enforcer-plugin.
Вот ссылка, которая показывает, как обеспечить наличие системного свойства -> http://maven.apache.org/enforcer/enforcer-rules/requireProperty.html
Я просто скопирую XML дословно здесь на случай, если приведенная выше ссылка выйдет из строя.
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<id>enforce-property</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireProperty>
<property>basedir</property>
<message>You must have a basedir!</message>
<regex>d</regex>
<regexMessage>You must have a digit in your baseDir!</regexMessage>
</requireProperty>
<requireProperty>
<property>project.version</property>
<message>"Project version must be specified."</message>
<regex>(d|-SNAPSHOT)$</regex>
<regexMessage>"Project version must end in a number or -SNAPSHOT."</regexMessage>
</requireProperty>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
Комментарии:
1. Спасибо за проницательный ответ, Алекс. Хотя я ищу свойство по умолчанию, а не применяю его. Поэтому, если оно не указано, скрипт будет использовать значение по умолчанию.
2. @TERACytE. Да, значение в
properties
разделе является значением по умолчанию, и вы всегда можете перезаписать его из командной строки.
Ответ №2:
Вы можете указать значение по умолчанию как
<properties>
<someTag>defaultValue</someTag>
</properties>
Когда вы запускаете команду maven, вы можете переопределить это значение следующим образом
mvn clean package -DsomeTag=newSpecificValue
Комментарии:
1. Простое решение, которое мне нужно было использовать в сборке Дженкинса
Ответ №3:
Вместо этого вы можете использовать профили, но вам понадобится профиль для каждой переменной.
<profile>
<id>default-value-1</id>
<activation>
<activeByDefault>false</activeByDefault>
<property>
<name>!someVariable</name>
</property>
</activation>
<properties>
<someVariable>DEFAULT-VALUE</someVariable>
</properties>
</profile>