Укажите системное свойство для проекта Maven
Есть ли способ (я имею в виду, как я) установить системное свойство в проекте Maven?
Я хочу получить доступ к свойству из моего теста и моего веб-приложения (работающего локально) и знаю, что могу использовать системное свойство java.
Должен ли я положить это в./settings.xml или что-то в этом роде?
контекст
Я взял проект с открытым исходным кодом и сумел изменить конфигурацию БД для использования JavaDB
Теперь в URL-адресе jdbc для JavaDB местоположение базы данных может быть указано как полный путь (см.: этот другой вопрос)
Или системное свойство: derby.system.home
У меня уже работает код, но в настоящее время он жестко запрограммирован на:
jdbc:derby:/Users/oscarreyes/javadbs/mydb
И я хочу удалить полный путь, чтобы оставить его как:
jdbc:derby:mydb
Для этого мне нужно указать системное свойство (derby.system.home
Мэйвен, но я не знаю как.
Тест выполняется с использованием junit (я не вижу плагинов в pom.xml), а веб-приложение работает с плагином Jetty.
Задание системного свойства в командной строке, похоже, работает на причину, но я не уверен, что это что-то практичное (если некоторые другие пользователи могут запускать его из eclipse/idea/ what)
4 ответа
Есть ли способ (я имею в виду, как я) установить системное свойство в проекте Maven? Я хочу получить доступ к свойству из моего теста [...]
Вы можете установить системные свойства в конфигурации плагина Maven Surefire (это имеет смысл, поскольку тесты по умолчанию разветвляются). Из использования системных свойств:
<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>
и мое веб-приложение (работает локально)
Не уверен, что вы имеете в виду здесь, но я предполагаю, что контейнер веб-приложений запущен Maven. Вы можете передать системные свойства в командной строке, используя:
mvn -DargLine="-DpropertyName=propertyValue"
Обновление: Хорошо, получил это сейчас. Для Jetty вы также должны иметь возможность установить системные свойства в конфигурации плагина Maven Jetty. Из настройки свойств системы:
<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>
Плагин 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>
Я узнал, что это также возможно сделать с помощью 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>
Если ваш тест и веб-приложение находятся в одном проекте Maven, вы можете использовать свойство в проекте POM. Затем вы можете отфильтровать определенные файлы, что позволит Maven установить свойство в этих файлах. Существуют различные способы фильтрации, но наиболее распространенный - на этапе ресурсов - http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-description.html
Если тест и веб-приложение находятся в разных проектах Maven, вы можете поместить это свойство в settings.xml, который находится в папке вашего хранилища maven (C:\Documents and Settings\username.m2) в Windows. Вам все еще нужно будет использовать фильтрацию или какой-либо другой метод для чтения свойства в тесте и веб-приложении.