Maven 2.1.0 не передает свойства системы виртуальной машине Java

StackOverflow https://stackoverflow.com/questions/824019

Вопрос

Мы используем командную строку для передачи свойств системы на виртуальную машину 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top