Установка значений по умолчанию для пользовательских свойств Maven 2 - PullRequest
58 голосов
/ 22 мая 2009

У меня есть Maven pom.xml с плагином, которым я хочу управлять в командной строке. Все работает хорошо, за исключением того, что даже после поиска в сети некоторое время я не могу понять, как установить значение по умолчанию для моего свойства элемента управления:

<plugin>
    ...
    <configuration>
        <param>${myProperty}</param>
    </configuration>
    ...
</plugin>

Так что, если я буду запускать Maven с

mvn -DmyProperty=something ...

все хорошо, но я бы хотел, чтобы конкретное значение было присвоено myProperty также без переключателя -DmyProperty=.... Как это можно сделать?

Ответы [ 5 ]

61 голосов
/ 05 августа 2013

Значение свойства по умолчанию может быть определено в <build>/<properties> или в профиле, как показано ниже. Когда вы вводите значение свойства в командной строке с помощью -DmyProperty=anotherValue, оно переопределяет определение из POM.

<profile>
    ...
    <properties>
        <myProperty>defaultValue</myProperty>            
    </properties>
    ...
       <configuration>
          <param>${myProperty}</param>
       </configuration>
    ...
</profile>
36 голосов
/ 28 мая 2009

Подход Тейлора Л работает отлично, но вам не нужен дополнительный профиль. Вы можете просто объявить значения свойств в файле POM.

<project>
  ...
  <properties>
    <!-- Sets the location that Apache Cargo will use to install containers when they are downloaded. 
         Executions of the plug-in should append the container name and version to this path. 
         E.g. apache-tomcat-5.5.20 --> 
    <cargo.container.install.dir>${user.home}/.m2/cargo/containers</cargo.container.install.dir> 
  </properties> 
</project>

Вы также можете установить свойства в своем файле settings.xml пользователя, если вы хотите, чтобы каждый пользователь мог установить свои собственные значения по умолчанию. Мы используем этот подход, чтобы скрыть учетные данные, которые сервер CI использует для некоторых плагинов от обычных разработчиков.

26 голосов
/ 22 мая 2009

Вы можете использовать что-то вроде ниже:

<profile>
    <id>default</id>
    <properties>
        <env>default</env>
        <myProperty>someValue</myProperty>            
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>
4 голосов
/ 08 января 2016

@ решение akostadinov отлично работает для общего использования ... Но если компонент реактора должен использовать желаемое свойство на этапе разрешения зависимостей (очень рано при обработке иерархии mvn pom ...), вы должны использовать профиль " нет Activation"механизм тестирования, чтобы гарантировать, что значение в дополнительной командной строке всегда имеет приоритет относительно значения, предоставленного внутри pom.xml. И это все, что глубоко в вашей иерархии пом.

Для этого добавьте такой профиль в родительский файл pom.xml:

 <profiles>
    <profile>
      <id>my.property</id>
      <activation>
        <property>
          <name>!my.property</name>
        </property>
      </activation>
      <properties>
        <my.property>${an.other.property} or a_static_value</my.property>
      </properties>
    </profile>
  </profiles>
1 голос
/ 22 мая 2009

Это может работать для вас:

<profiles>
  <profile>
    <id>default</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <build>
     <plugin>
       <configuration>
        <param>Foo</param>
       </configuration>
     </plugin>
    </build>
    ...
  </profile>
  <profile>
    <id>notdefault</id>
    ...
     <build>
      <plugin>
        <configuration>
            <param>${myProperty}</param>
        </configuration>
     </plugin>
     </build>
    ...
  </profile>
</profiles>

Таким образом,

mvn clean будет использовать "foo" в качестве параметра по умолчанию. В случаях, когда вам нужно переопределить, используйте mvn -P notdefault -DmyProperty=something

...