2011-04-17 113 views
-1

我在启动我认为是labrepl程序的Web服务器时遇到了一些困难。
我使用说明here来设置一切,并成功安装labrepl。在Eclipse Helio中使用Clojure启动labrepl时出错

我能够运行repl并在浏览器中获得课程。出于某种原因,当我今天启动Eclipse并使用“Run As new Clojure project的JVM和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 [email protected]:9000: java.net.BindException:  
Address already in use: JVM_Bind 
2011-04-17 01:29:07.503:WARN::failed [email protected]: 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

对于任何人的未来参考,我将这个问题的根源追溯到我将PHP透视图安装到Eclipse时。 – jonsca 2011-04-28 06:02:10

回答

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) 

的命令行是有点错位,但辨认:过程是听我的8080端口,并且这个过程是我本地的sexpbot副本。

如果你有这样一个过程,你可以通过临时禁用它来解决你的问题(比如杀死进程)。

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

+0

你对其他解决方案不适用是正确的。我想我在想,也许在新版本中有些事情已经破裂,我必须得到一个较早的版本。您的解决方案现在不能正常工作,但我会稍微调整一下这些设置。我认为我可能不得不使用这些端口,但我并没有期望它能够在代码中随时可用(还有3个辅助文件,它们也随之更长) 。 – jonsca 2011-04-17 09:29:37

+0

我在Windows上,顺便说一句。我必须找到能够完成你的* nix utils工作的东西。好的,我已经尝试了3次更改端口,并且在写入命令时无论我将它更改为9000。我认为有一个配置文件需要改变。抱歉,这变成了一个网络寻宝而不是Clojure。 – jonsca 2011-04-17 09:46:11

+0

你非常接近问题的根源。我一直在更改labrepl.clj中的端口,并一直在说“port 9000已被使用”,所以我注意到在labrepl.clj的runjetty行之前,有一个对src/solutions/mini-browser.clj的调用。这是罪魁祸首,因为还有另一个呼叫runjetty访问端口9000(这是我的系统上的另一个程序声称,我将它改为9009,一切都很好,非常感谢您的帮助! – jonsca 2011-04-18 21:55:54