Intellij запускает Maven как другой пользователь? - PullRequest
1 голос
/ 09 января 2012

Я настроил принудительный контроль для проверки некоторых свойств. Они экспортируются как переменные среды в моем файле .profile в моем домашнем каталоге. Сборка с консоли работает нормально.

Сборка из intellij (двойной щелчок по целям в меню maven) завершается неудачно, поскольку принудительное средство не может найти свойства ... Что здесь не так и как это исправить?

Мое первое предположение состоит в том, что intellij запускает maven как другой пользователь, но я не уверен, как это проверить или что с этим делать.

ПРИМЕЧАНИЕ: я не прошу обходной путь. Можно было бы задать свойства в настройках maven Runner для intellij, а второе - для установки свойств в /etc/profile. Но я бы хотел их избежать.

РЕДАКТИРОВАТЬ : Я попытался перезапустить intellij, X-сервер и компьютер - без последствий для принудительного применения. printenv в новой консоли показывает мои переменные, как и ожидалось. Запуск intellij с той же консоли приводит к той же ошибке сборки.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Каждая программа имеет свою собственную среду. Если вы измените настройки среды в .profile и т. П., Это не изменит настройки для запущенных программ. Когда одна программа запускает другую, она наследует настройки / окружение своего родителя. Настройки не загружаются снова.

Возможно, вы обнаружите, что изменения, которые вы вносите после запуска IntelliJ, не влияют на программы, запускаемые IntelliJ. То же самое произойдет, если вы откроете командное окно, измените настройки и запустите новые программы (оболочка сохранит настройки, которые были у нее при запуске). Чтобы это исправить, необходимо перезапустить IntelliJ. Если вы запускаете его из командной строки, убедитесь, что это новое окно.


Этот модульный тест должен сбрасывать среду.

@Test
public void dumpEnv() {
    for (Map.Entry<String, String> entry : new TreeMap<String, String>(System.getenv()).entrySet()) {
        System.out.println(entry);
    }
}
1 голос
/ 09 января 2012

.profile выполняется только при входе в систему с использованием KSH. Если вы используете BASH, это не имеет никакого эффекта.

.bashrc (если вы используете BASH) гораздо более подходящее место, потому что оно выполняется каждый раз, когда вы запускаете оболочку (сценарии оболочки, новые окна терминала и т. Д.).

Для KSH .kshrc имеет тот же эффект .

Чтобы убедиться, что переменные есть, используйте set (без параметров), чтобы перечислить их все, или set|grep шаблон для поиска. Как только они появятся в новом окне терминала, они также должны появиться внутри вашей IDE.

[РЕДАКТИРОВАТЬ] Если set может их видеть, то и IntelliJ. Осталось только то, что IntelliJ мог очистить окружающую среду при запуске Maven.

Чтобы проверить это, переименуйте mvn в mvn.orig и создайте новый скрипт mvn с таким содержанием:

#!/bin/bash
set > $HOME/mvn_env.log
mvn.orig "$@"

Этот сценарий создает дамп среды, так как mvn видит ее $HOME/mvn_env.log. Если переменные отсутствуют, IntelliJ очищает среду.

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