Ответ 1
lein help trampoline
:
Запустите задачу, не вложив проект JVM внутри Leiningen's.
Вычисляет код Clojure для запуска в процессе проекта для данной задачи и позволяет Leiningen самостоятельно запускать JVM-процесс запуская его, а не запуская подпроцесс JVM Leiningen.
Используйте это для экономии памяти или для устранения проблем с stdin.
Аргументы: ([имя задачи и аргументы])
Итак, вы можете видеть, без trampoline
вторая JVM запускается как подпроцесс первого. Вот почему первый не может выйти - выход нарушит вторую.
С другой стороны, при trampoline
первая JVM создает оболочку script, которая затем выполняется lein
script, чтобы создать вторую JVM. Таким образом, в этом случае вторая JVM является дочерним элементом lein
script. Как Clojure Младенцы сделаны: Leiningen Trampoline охватывает это довольно подробно.
Что касается того, почему trampoline
не является значением по умолчанию, я не совсем уверен. Но помните, что не каждая команда lein
запускает код проекта, поэтому вторая JVM не нужна для каждой команды.
Кроме того, могут быть недостатки в использовании trampoline
. Например, взгляните на следующие строки кода из приведенной выше статьи:
# Just don't change :target-path in project.clj, mkay?
TRAMPOLINE_FILE="target/trampolines/$INPUT_CHECKSUM"
Для меня это означает, что могут возникнуть проблемы, если :target-path
задано в project.clj
.