Maven 2.1.0 не передает системные свойства виртуальной машине Java
Мы используем командную строку для передачи системных свойств виртуальной машине Java при запуске наших сборок Hudson на компьютере с Linux. Раньше он работал довольно хорошо в 2.0.9, так как с тех пор, как мы обновились до 2.1.0, он вообще перестал работать. Системные свойства просто никогда не доходят до виртуальной машины Java.
Я создал небольшой тестовый проект, и он действительно не работает вообще.
Это должно хорошо работать с Maven 2.0.9:
mvn2.0.9 -Dsystem.test.property=test test
Но это не удастся:
mvn2.1 -Dsystem.test.property=test test
Java-код просто делает это
assertTrue( System.getProperty("system.test.property") != null);
3 ответа
Я не думаю, что это проблема в плагине Maven или Surefire. Иначе верный ведет себя по-другому. Похоже, теперь, когда Surefire разветвляет JVM, не будет принимать все системные свойства у родительской JVM.
Вот почему вы должны передать любые системные свойства, которые вы хотите для тестов, используя argLine. Итак, оба эти должны работать
mvn2.1 -Dsystem.test.property=test test -DforkMode=never
или же
mvn2.1 test -DargLine="-Dsystem.test.property=test"
Я испытал это с плагином Surefire. Плагин Surefire запускается под другим экземпляром JVM, который запускается Maven. Параметры командной строки настраиваются под конфигурацией surefile-plugin в вашем pom.xml. Вот образец нашей конфигурации.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<!--
By default, the Surefire Plugin will automatically include all test classes with the following wildcard patterns:
"**/Test*.java" - includes all of its subdirectory and all java filenames that start with "Test". "**/*Test.java" -
includes all of its subdirectory and all java filenames that end with "Test". "**/*TestCase.java" - includes all of
its subdirectory and all java filenames that end with "TestCase".
-->
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<systemProperties>
<property>
<name>app.env</name>
<value>dev</value>
</property>
<property>
<name>oracle.net.tns_admin</name>
<value>${oracle.net.tns_admin}</value>
</property>
</systemProperties>
</configuration>
</plugin>
Будьте осторожны, чтобы не перепутать файл конфигурации с аргументами командной строки. Файл конфигурации (pom.xml) переопределяет все аргументы cmd. Так что не настраивайте плагин surefire в pom.xml, если вы хотите передать его через командную строку, как объяснил raisercostin.