Maven 2.1.0 не передает свойства системы виртуальной машине Java
-
05-07-2019 - |
Вопрос
Мы используем командную строку для передачи свойств системы на виртуальную машину Java при запуске нашего Хадсон построен на базе Linux.Раньше он работал довольно хорошо в 2,0,9, так как мы обновили до 2,1,0, он вообще перестал работать.Свойства системы просто никогда не попадают в виртуальную машину Java.
Я создал небольшой тестовый проект, и он вообще не работает.
Это должно работать нормально с Мавен 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);
Решение
Я не думаю, что это проблема ни в плагине 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 в вашем 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.