Есть ли способ установить системные свойства в 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
предоставлен.
Надеюсь, это поможет.