Дженкинс выбрасывает java .lang.NoSuchFieldException: theCaseInsensitiveEnvironment - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь установить переменную среды с помощью модульного теста, когда я запускаю свой код на локальной машине, он работает нормально.

Но когда я развертываю его в конвейере Jenkins, он начинает выдавать исключение.

Исключение: -

java .lang.NoSuchFieldException: theCaseInsensitiveEnvironment

Фрагмент кода: -

Class<?> processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment");
Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment");
theEnvironmentField.setAccessible(true);
Map<String, String> env = (Map<String, String>) theEnvironmentField.get(null);
env.clear();
env.putAll(newenv);
Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment");
theCaseInsensitiveEnvironmentField.setAccessible(true);
Map<String, String> cienv = (Map<String, String>) theCaseInsensitiveEnvironmentField.get(null);
cienv.clear();
cienv.putAll(newenv);

1 Ответ

1 голос
/ 02 апреля 2020

Вы решаете не ту проблему. Ваш бизнес-код никогда не должен напрямую зависеть от переменной среды, между ними должен быть слой изоляции. Отсоедините ваш ввод от служебного кода, и вам больше не нужно будет имитировать переменные среды.

...