SystemPropertyVariable не читается в Eclipse IDE - PullRequest
0 голосов
/ 07 ноября 2018

В проекте ma maven у меня есть что-то вроде ниже в pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.19.1</version>
    <configuration>
    <systemPropertyVariables>
        <environment>DEV</environment>
    </systemPropertyVariables>
    </configuration>
</plugin>

И, конечно, я использую это свойство в своем коде Java. Однако моя проблема заключается в том, что если я запускаю свои тесты в Eclipse, то это свойство не читается из файла pom и, наконец, мое свойство 'environment' остается пустым.

Если я запускаю свои тесты из консоли, добавляя '-Denvironment = DEV', тогда все в порядке.

У меня вопрос, как настроить Eclipse так, чтобы он видел мое свойство 'environment' таким, какое оно есть, пока я запускаю его из консоли?

Может кто-нибудь помочь, пожалуйста? Я не могу найти решение сам ...

Спасибо

1 Ответ

0 голосов
/ 07 ноября 2018

Это распространенное заблуждение о том, как работает Maven.

Ядро Maven определяет жизненный цикл сборки, по сути, конечный автомат, который сообщает ему, как перейти к данной фазе. Например, если вы запустите:

mvn test-compile

Maven знает, что сначала ему нужно выполнить ряд шагов (состояний), прежде чем он сможет выполнить test-compile. Каждое из этих состояний может иметь или не иметь подключенный плагин, который Maven будет выполнять, учитывая, как написано POM. По сути, сам Maven не выполняет никакого копирования, компиляции, тестирования, упаковки ресурсов и т. Д. Все эти задачи передаются плагинам.

Когда вы импортируете проект Maven в Eclipse, он по разным причинам предоставит свое собственное отображение плагинов. Некоторые из них (например, компиляция) будут иметь смысл для среды IDE, для выполнения которой будут использоваться собственные плагины. Другие фазы, которые не являются частью того, что обычно делает Eclipse (например, упаковка), не будут отображаться и, следовательно, не будут иметь плагин для выполнения.

Выполнение тестов JUnit - это не то, что Eclipse обычно выполняет как часть сборки, поэтому вы запускаете тесты JUnit вручную ( тестовый класс правой кнопкой мыши * > Запуск от имени> тест JUnit). Eclipse просто игнорирует плагин surefire, так как для запуска тестов использует свой собственный внутренний бегунок JUnit, и поэтому он не выбирает конфигурацию из плагина surefire.

Я не сомневаюсь, что это можно сделать для работы в Eclipse, но на момент написания этого просто нет. Вы случайно не пробовали IntelliJ?

Однако, поскольку можно утверждать, что Eclipse всегда находится в режиме "DEV", будет ли подходящим обходным решением то, что вы статически устанавливаете системное свойство на JRE в Eclipse?

Вот так:

Окно> Настройки> Java> Установленные JRE> выберите свой JRE > Правка ...> Аргументы виртуальной машины по умолчанию: -DDEV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...