установить systemProperty в exec-maven-plugin не работает

Вот мой файл pom.xml:

<project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <profiles>
        <profile>
            <id>my_proj</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>exec-maven-plugin</artifactId>
                        <version>1.4.0</version>
                        <executions>
                            <execution>
                                <phase>install</phase>
                                <goals>
                                    <goal>exec</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>

                            <executable>java</executable>
                            <arguments>
                                <argument>-classpath</argument>
                                <classpath />
                                <argument>com.test.Main</argument>

                            </arguments>
                            <systemProperties>
                                <systemProperty>
                                    <key>someKey</key>
                                    <value>someValue</value>
                                </systemProperty>
                            </systemProperties>
                            <environmentVariables>
                                <someKey>
                                    someValue
                                </someKey>
                            </environmentVariables>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

        </profile>
    </profiles>

</project>

и в Main.java

public static void main(String[] args) {

    System.out.println("hello world" + System.getenv("someKey") + " " + System.getProperty("someKey"));
}

вывод, когда я запускаю

mvn install -Pmy_proj

is

hello worldsomeValue null

Кажется, я не могу получить значение systemProperty. Что я сделал не так ?


person Tran Ngu Dang    schedule 12.04.2016    source источник


Ответы (1)


systemProperty не работает просто потому, что это не ожидаемый элемент exec< /a> цель exec-maven-plugin.

Проверьте официальную страницуexecцели, элемент systemProperties не указан. Таким образом, ваша конфигурация по-прежнему действительна для Maven просто потому, что это правильно сформированный XML, но он игнорируется exec-maven-plugin.

Из официального справочника Maven Pom относительно элемента configuration плагина:

Может быть полезно отметить, что все элементы конфигурации, где бы они ни находились в POM, предназначены для передачи значений в другую базовую систему, такую ​​как плагин. Другими словами: значения внутри элемента конфигурации никогда явно не требуются схемой POM, но цель плагина имеет полное право требовать значения конфигурации.


Вы вносите путаницу в запись конфигурации systemProperties, предусмотренную его java цель. Этот параметр доступен там из-за его контекста: он создан для выполнения Java. С другой стороны, цель exec носит гораздо более общий характер и поэтому не может предвидеть опцию, требуемую только программами Java.

Чтобы передать системные свойства исполнению Java через цель exec, вы можете использовать arguments запись конфигурации и используйте -D обозначение

-Dproperty=value Задает значение системного свойства.

Дополнительное примечание: согласно официальному Запуск Java-программ с документацией exec target аргументы -D должны идти первыми:

<configuration>
    <executable>java</executable>
    <arguments>
        <argument>-DsomeKey2=someValue2</argument>
        <argument>-classpath</argument>
        <classpath />
        <argument>com.test.Main</argument>
    </arguments>
    <environmentVariables>
        <someKey>someValue</someKey>
    </environmentVariables>
</configuration>

Кроме того, вы не должны устанавливать одно и то же имя переменной для среды и системного свойства, иначе системное свойство не будет установлено.

person A_Di-Matteo    schedule 12.04.2016
comment
Спасибо теперь работает. Я отредактировал комментарий и отметил ваш ответ как правильный - person Tran Ngu Dang; 12.04.2016