Укажите системное свойство для проекта Maven
Есть ли способ (я имею в виду, как я) установить системное свойство в проекте maven?
Я хочу получить доступ к свойству из моего теста и моего webapp (работает локально), и я знаю, что могу использовать свойство java-системы.
Должен ли я помещать это в. /settings.xml или что-то в этом роде?
Контекст
Я взял проект с открытым исходным кодом и смог изменить конфигурацию db для использования JavaDB
Теперь, в jdbc url для JavaDB, местоположение базы данных можно указать как полный путь (см. этот другой вопрос)
Или системное свойство: derby.system.home
У меня уже работает код, но в настоящее время он все жестко закодирован:
jdbc:derby:/Users/oscarreyes/javadbs/mydb
И я хочу удалить полный путь, чтобы оставить его как:
jdbc:derby:mydb
Для этого мне нужно указать системное свойство (derby.system.home
) на maven, но я не знаю, как это сделать.
Тест выполняется с помощью junit (я не вижу плагина в pom.xml), и веб-приложение работает с плагином причала.
Задание свойства системы в командной строке, похоже, работает для причала, но я не уверен, что что-то практическое (если некоторые другие пользователи могут запускать его из eclipse/idea/whatever)
Ответы
Ответ 1
Есть ли способ (я имею в виду, как я) установить системное свойство в проекте maven? Я хочу получить доступ к свойству из моего теста [...]
Вы можете установить системные свойства в конфигурации Maven Surefire Plugin (это имеет смысл, поскольку тесты разворачиваются по умолчанию). Из Использование свойств системы:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<systemPropertyVariables>
<propertyName>propertyValue</propertyName>
<buildDirectory>${project.build.directory}</buildDirectory>
[...]
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
[...]
</project>
и мой webapp (выполняется локально)
Не уверен, что вы имеете в виду здесь, но я предполагаю, что контейнер webapp запускается Maven. Вы можете передать свойства системы в командной строке, используя:
mvn -DargLine="-DpropertyName=propertyValue"
Обновление: Хорошо, получилось сейчас. Для Jetty вы также можете установить свойства системы в конфигурации Maven Jetty Plugin. Из Настройка свойств системы:
<project>
...
<plugins>
...
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
...
<systemProperties>
<systemProperty>
<name>propertyName</name>
<value>propertyValue</value>
</systemProperty>
...
</systemProperties>
</configuration>
</plugin>
</plugins>
</project>
Ответ 2
properties-maven-plugin плагин может помочь:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<property>
<name>my.property.name</name>
<value>my.property.value</value>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>
Ответ 3
Я узнал, что также можно сделать это с помощью exec-maven-plugin, если вы делаете "автономное" java-приложение.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>${maven.exec.plugin.version}</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>${exec.main-class}</mainClass>
<systemProperties>
<systemProperty>
<key>myproperty</key>
<value>myvalue</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
Ответ 4
Если ваш тест и webapp находятся в одном проекте Maven, вы можете использовать свойство в проекте POM. Затем вы можете отфильтровать определенные файлы, которые позволят Maven установить свойство в этих файлах. Существуют различные способы фильтрации, но наиболее часто встречаются во время фазы ресурсов - http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html
Если тест и webapp находятся в разных проектах Maven, вы можете поместить это свойство в settings.xml, который находится в папке вашего хранилища maven (C:\Documents and Settings\username.m2) в Windows. Вам все равно придется использовать фильтрацию или какой-либо другой метод, чтобы прочитать свойство в вашем тесте и webapp.