Есть ли способ установить системные свойства в leinegen?

Запуск задачи lein (фактически тест, который по умолчанию выполняется с профилем :test). Я хотел бы начать с эквивалента

java -Dproperty1= значение -Dproperty2= значение2 задача

В Интернете есть несколько ссылок, которые предполагают, что это должно работать нормально:

project.clj:

...
:profiles {:test {:jvm-opts ["-Dproperty1=value" "-Dproperty2-value"]}}

Это игнорируется в моем тесте бегуна. Профиль правильный, если я вставлю некоторые фактические аргументы jvm (например, что-то вроде "-XX:+PrintGC"), он будет работать нормально. Но, похоже, не подбирает системные свойства. Есть ли правильный способ сделать это?

2 ответа

Нашел ответ, для всех, кто борется с этим:

Так как мне нужно было ввести свойства среды, прежде чем я начал процесс, я сделал следующее:

добавьте плагин оболочки в ваш project.clj:

: плагины [[ lein-shell "0.4.1"]]

а затем добавьте подготовительное задание в свой профиль. Но есть морщина - вы думаете, вы могли бы сделать это:

:profiles {:test {:prep-tasks [["shell" "export" "foo=bar"]]}}

Но это не работает, так как оболочка не видит команду экспорта - вы получаете "нет такого файла", так как это часть bash и нет исполняемого файла с именем "export". Поэтому я создал скрипт под названием "setenv.sh" и запустил его из оболочки:

:profiles {:test {:prep-tasks [["shell" "./test/setenv.sh"]]}}

Редактировать: на самом деле это не работает, переменные не переносятся в подпроцесс. Оставьте это здесь, потому что это может быть полезно для кого-то, как есть.

Редактировать: на самом деле пришлось создать сценарий оболочки, который вызывает экспорт, а затем запускает lein. Определенно не самое элегантное решение.

project.clj:

(defproject ...
    :injections [(.. System (setProperty "custom_key" "24623472372576878923"))])

Мы используем среду для этой цели.

После того, как вы установите плагин, все, что вам нужно сделать, это создать файл .lein-env в корне вашего проекта, содержащего карту переменных среды, которые будут установлены, такие как:

{
  :s3-access-key     "some key"
  :s3-secret-key     "some secret"
}

Затем в своем коде вы можете использовать:

(require '[environ.core :refer [env]])
(env :s3-access-key) ;; "some key"

Это позволяет мне указать, скажем, на заглушку сервера в тесте, но реальная вещь в производстве, так как среда будет использовать системные переменные среды, если нет .lein-env предоставлен.

Надеюсь, это поможет.

Другие вопросы по тегам