在Eclipse Helios中使用Clojure启动labrepl时出错

时间:2011-04-17 05:46:55

标签: eclipse clojure read-eval-print-loop

我在开始我认为是labrepl程序的网络服务器时遇到了一些困难 我使用说明here来设置所有内容,并成功安装了labrepl。

我能够运行repl并在浏览器中获取课程。出于某种原因,当我今天启动Eclipse并使用“Run as new Clojure project JVM and REPL”时,它表示labrepl.clj中存在错误。我清除了由git制作的目录(我找不到Maven制作的目录,但我将其从工作区中删除,指定删除文件)。

我再次浏览了该网站上的指示,得到了似乎是labrepl 0.0.2(根据pom.xml文件)。现在labrepl.clj没有问题,但是当启动(labrepl/-main)时,会出现以下错误:

2011-04-17 01:29:07.380:INFO::jetty-6.1.26
2011-04-17 01:29:07.502:WARN::failed SocketConnector@0.0.0.0:9000: java.net.BindException:     
Address already in use: JVM_Bind
2011-04-17 01:29:07.503:WARN::failed Server@2d68be1b: java.net.BindException: Address  
already in use: JVM_Bind
java.net.BindException: Address already in use: JVM_Bind (repl-1:3)

因此,基于Web的课程版本将无效。我通过目录结构搜索课程,但我找不到任何HTML。

我发现this似乎是一个类似的问题,可能的解决方案,可以回滚到早期版本,但我想知道是否有人遇到过这种特殊情况。

1 个答案:

答案 0 :(得分:1)

您链接的问题并不相似:您已经解决了他遇到的问题,因此无需担心尝试应用他的解决方案。相反,您的问题是其他一些程序正在使用套接字8080,因此labrepl网络服务器不能。

上次我使用Eclipse时,结果发现Eclipse本身可以选择使用8080来获得某种动态语言支持,而这正在阻碍我的发展。但8080是一个非常常见的端口,而其他人可能正在使用它。

如果您使用类似Unix的操作系统,有一种方法可以找出谁打开了该套接字 - 使用lsof列出“打开文件”并使用-i选项说明你的意思是插座。

$ lsof -i :8080
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    6427  akm   46u  IPv6 107739      0t0  TCP *:http-alt (LISTEN)

$ cat /proc/6427/cmdline 
java-cplib/*:src/:resourceclojure.main-e(use 'sexpbot.run) (-main)

命令行有点严重,但可识别:进程 6427 正在侦听我的端口8080,该进程是我sexpbot的本地副本。

如果你有这样一个过程,你可以通过暂时禁用它来解决问题(例如,通过终止进程)。

更好的长期解决方案是将Jetty配置为使用不同的端口进行labrepl。我确信有更好的方法可以做到这一点,但我不太了解Jetty。如果您查看labrepl/src/labrepl.clj内部,则会有一行(run-jetty (var app) {:port 8080。将8080更改为其他端口(例如,8778),然后它应该启动正常。您将能够浏览到localhost:8778并以这种方式使用labrepl。