[英]lein uberjar taking forever
我想創建一個 leiningen 應用程序的 uberjar。 我的配置是:
:uberjar {:omit-source true
:aot :all
:uberjar-name "myapp.jar"
:source-paths ["env/prod/clj" ]
:resource-paths ["env/prod/resources"]}
但是在執行lein uberjar
,我發現正在編譯項目中的文件,但是編譯停留在包含大部分代碼的文件上,持續了十分鍾並且還在計數。 此文件不包含超過 140 行。
TL;DR: def
副作用
如評論中所述:
...我只是認為這一行:
(defonce server (http/start-server server-handler {:port 8982}))
導致掛起。
不要把這樣的東西放在頂層。
defonce
僅意味着它一旦存在就不會被重新定義(因此在這種情況下,它將防止重新加載時出現一些“端口已在使用”錯誤。
編寫一個 function,啟動這個服務器。 然后從你的主要調用它。 對於開發,您可以從 REPL 運行 function,或者您可以在您的用戶 ns 中添加一些重新加載/重啟邏輯。
另一種選擇可能是使用delay
:它只會在被deref
編輯后才執行代碼。
您必須處理的“資源綁定”越多,一些系統化的方法就會越多地為您的應用程序提供更好的結構。 例如看一下:
def
有問題呢? Clojure 編譯器的工作方式實際上是“運行”代碼。 所以compile
基本上是:
這意味着,在編譯時,將執行頂級副作用。 因此def
中的阻塞操作會阻塞編譯(這很明顯),或者您的 CI 服務器將無法編譯,因為它無法連接到數據庫等。
很好地解釋了 Clojure 中的代碼生成如何工作:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.