2011-04-17 110 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