为什么`lein run`不是`lein trampoline`?

27
我觉得lein runlein trampoline之间唯一的区别在于后者退出Leiningen的JVM以节省内存。

这似乎总是一个好主意,那么为什么这个功能没有包含在lein run中,然后摆脱lein trampoline呢?


4
根据个人经验(我并没有验证过,可能是错误的),使用蹦床似乎无法通过监控守护程序(例如supervisor)来跟踪该进程。 - Johanna Larsson
2
我的经验与Erik的完全相反。在FreeBSD上使用daemontools时,服务的运行脚本中的'lein run'意味着'svc -d'终止了lein进程并使子服务JVM变为孤儿进程。'lein trampoline'解决了这个问题。我猜这取决于您的监管守护程序的要求。 - Danny Woods
1个回答

22

lein trampoline 可以用于任何 Leiningen 任务,而不仅仅是 lein run。例如:lein trampoline test

实际上,lein trampoline 杀掉了原始的 Leiningen 进程,这样当任务开始运行时,只有实际的 JVM 子进程才处于活动状态,用来运行 Clojure 代码。这对于 shell 脚本很有用,因为杀死实际的 JVM 不会杀死 Leiningen 进程,反之亦然。


1
也许我太蠢了,但这个回答与原问题有何关系? - osxdirk
由于“蹦床(trampoline)”功能比“lein run”适用于更多任务,因此如果移除“lein trampoline”并将“lein run”默认为像“lein trampoline run”一样的行为,那么今天你将无法执行“lein trampoline test”。 - August Lilleaas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接