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


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

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

Так что если я запускаю Maven с

mvn -DmyProperty=something ...

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

5 52

5 ответов:

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

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

подход Тейлора 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>

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

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

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

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

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

<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