Подтвердить что ты не робот

Установка значений по умолчанию для пользовательских свойств Maven 2

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

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

Итак, если я запустил Maven с помощью

mvn -DmyProperty=something ...

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

4b9b3361

Ответ 1

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

<profile>
    ...
    <properties>
        <myProperty>defaultValue</myProperty>            
    </properties>
    ...
       <configuration>
          <param>${myProperty}</param>
       </configuration>
    ...
</profile>

Ответ 2

Taylor L работает отлично, но вам не нужен дополнительный профиль. Вы можете просто объявить значения свойств в файле 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>

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

Ответ 3

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

<profile>
    <id>default</id>
    <properties>
        <env>default</env>
        <myProperty>someValue</myProperty>            
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>

Ответ 4

Решение @akostadinov отлично подходит для общего использования... Но если желаемое свойство будет использоваться компонентом реактора во время фазы разрешения зависимостей (очень рано при обработке иерархии mvn pom...), вы должны использовать механизм тестирования профиля "без активации", чтобы гарантировать необязательное значение, предоставленное в командной строке, всегда имеет приоритет относительно значения, предоставленного внутри 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>

Ответ 5

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

<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