свойства Maven для каждого пользователя - PullRequest
5 голосов
/ 22 июня 2011

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

Например, в сборке Ant вы можете определить свойства по умолчанию в foo.properties, но Ant будет искать переопределения для каждого из них в foo.$USERNAME.properties.Последний, как правило, не проверяется в управлении исходным кодом, что устраняет проблему случайного принятия разработчиками их переопределений свойств по умолчанию.Предлагает ли Maven аналогичное средство?

Чтобы сделать проблему более конкретной, предположим, что в pom.xml

<properties>
  <db.url>jdbc:jtds:sqlserver://10.10.10.10:1433/somedb</db.url>
  <db.driver>net.sourceforge.jtds.jdbc.Driver</db.driver>
  <db.username>default_user</db.username>
  <db.password>secret</db.password>
</properties>
* 1011 определено следующее: Может ли пользователь переопределить эти свойства без редактированиянапрямую в pom.xml?

Ответы [ 4 ]

9 голосов
/ 22 июня 2011

Вы можете указать свойства в командной строке, используя -Dpropertyname=value, или пользователь может указать свойства в их .m2/settings.xml.

2 голосов
/ 22 июня 2011

Этого можно добиться с помощью профилей сборки. См. Введение в создание профилей для получения дополнительной информации.

1 голос
/ 28 июня 2011

Я использовал settings.xml, чтобы переопределить эти свойства, добавив следующее в <profiles> раздел

<profile>
  <id>override-database-properties</id>
  <activation>
    <property>
      <name>refreshDB</name>
    </property>
  </activation>

  <properties>
    <db.schema_name>store_don</db.schema_name>
  </properties>
</profile>

В этом случае переопределения вступят в силу только в том случае, если в команду mvn передан -DrefreshDB. Чтобы активировать эти переопределения каждый раз, когда вызывается Maven, также добавьте следующее к settings.xml

<activeProfiles> 
  <activeProfile>alwaysActiveProfile</activeProfile> 
</activeProfiles>

Если профиль добавлен в <activeProfiles>, то элемент <activation> должен быть удален.

0 голосов
/ 22 июня 2011

Если вы не хотите добавлять свойства в командной строке, но установите некоторые настройки один раз (и если вы можете принять значения по умолчанию, являющиеся пустыми строками);Вы можете использовать переменные окружения следующим образом:

<something>${env.ENVNAME}</something>
<!-- something will be blank "" unless ENVNAME is set -->

Редактировать: Я пытался найти способ определения значений по умолчанию для ${variable}, если переменная пуста / не определена, но я ничего не нашел, это, кажется, отсутствует (частое предложение использовать профили, но это не совсем то же самое).Я бы предпочел, чтобы вы могли просто установить некоторые переменные окружения и иметь разумные значения по умолчанию, чтобы вы могли просто запустить mvn clean install (а не строки из 20-40 символов, которые я обычно использую для построения нашего проекта). Если возможны значения по умолчанию, я бы хотел услышать, как ...

Кстати, если вы уже привыкли к Ant, я слышал, что вы можете каким-то образом вызывать задачи Ant из maven.(хотя не знаю как), может быть, вы могли бы использовать это как-то?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...