我在开始我认为是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似乎是一个类似的问题,可能的解决方案,可以回滚到早期版本,但我想知道是否有人遇到过这种特殊情况。
答案 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。