Подтвердить что ты не робот

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); 
4b9b3361

Ответ 1

Я не думаю, что это проблема в Maven или Surefire плагине. Иначе верный огонь ведет себя по-другому. Похоже, теперь, когда Surefire разворачивает JVM, не будет принимать все системные свойства из родительского JVM.

Вот почему вы должны передавать любые системные свойства, необходимые для тестов, используя argLine. Итак, оба эти должны работать

mvn2.1 -Dsystem.test.property=test test -DforkMode=never 

или

mvn2.1 test -DargLine="-Dsystem.test.property=test"

Ответ 2

Я испытал это с помощью 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>

Ответ 3

Будьте внимательны, чтобы не смешивать файл конфигурации с аргументами командной строки. Файл конфигурации (pom.xml) переопределяет все аргументы cmd. Поэтому не настраивайте плагин surefire внутри pom.xml, если вы хотите передать его в командной строке, как объяснил raisercostin.