如何在Intellij中调试Clojure Web应用程序?

时间:2019-05-24 22:40:37

标签: intellij-idea clojure ring cursive

我正在使用Intellij + Cursive,并且想调试使用ring + compojure编写的Clojure Web应用程序。我使用lein和ring插件在Intellij终端中启动应用程序:

> lein ring server-headless

我想使用Intellij调试此应用程序,以在源代码中设置断点,查看变量等。

但是Intellij的Leiningen选项卡未使用ring命令显示任务。运行配置也没有运行ring命令的选项。

2 个答案:

答案 0 :(得分:2)

您需要执行两个步骤:

  1. 更新您的project.clj以传递额外的参数,例如
  :ring {:nrepl {:start? true :port 4001}      ;; <== Add this
         :handler com.mycompany.web/myhandler} ;; you should have this 

...这应该在端口4000中启动Web应用程序,并在端口4001中启动nREPL端口进行调试等。您可以检查lein-ring documentation以获得更多详细信息。

启动应用程序时,您应该看到以下内容:

$ lein ring server-headless 4000
[... some output omitted ...]
Started nREPL server on port 4001
Started server on port 4000
  1. 在草书中,按照Cursive docs远程REPL 部分中的说明连接到nREPL服务器。您应在主机名和4001(或上一步配置中使用的任何nREPL端口)中使用localhost0.0.0.0

答案 1 :(得分:1)

Intellij有一个remote debug Run Configurationcan be used with Clojure

首先在project.clj文件的jvm中添加以下选项:

:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5010"]

其中5010是要在Intellij远程调试配置中指定的端口号。

然后,在Intellij中,转到Run -> Run... -> Edit Configurations...,使用+按钮并选择Remote.。为配置命名,将端口更改为5010,然后单击“确定”。使用lein运行应用程序:

> lein ring server-headless

应用程序运行后,运行(在Intellij中)您创建的Intellij远程调试配置。您将能够设置断点,逐行运行等。

没有莱宁根

另一个选择是放下leiningen并将ring应用程序作为Cursive中的Clojure应用程序运行。您必须添加一个-main函数:

(defn -main [] (run-jetty app {:port 8080})

app是您在:ring {:handler xxx/app}中定义路由并用作环形处理程序project.clj.的函数,您需要[ring.adapter.jetty :refer [run-jetty]]并在Intellij中调试该文件作为Clojure申请。