Ошибка при запуске labrepl с Clojure в Eclipse Helios - PullRequest
0 голосов
/ 17 апреля 2011

У меня возникли трудности с запуском, как я полагаю, веб-сервера для программы labrepl.
Я использовал инструкции здесь , чтобы все настроить, и успешно установил labrepl.

Мне удалось запустить репл и получить уроки в моем браузере. По какой-то причине, когда я сегодня запустил Eclipse и использовал «JVM нового проекта Clojure и 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)

Следовательно, веб-версия уроков не будет работать. Я искал структуру каталогов для уроков, но не смог найти ни одного html.

Я нашел эту , которая кажется подобной проблемой, возможным решением для отката к более ранней версии, но я хотел посмотреть, сталкивался ли кто-нибудь с этой конкретной ситуацией раньше .

1 Ответ

1 голос
/ 17 апреля 2011

Проблема, на которую вы ссылаетесь, не похожа: вы уже решили проблему, с которой он столкнулся, поэтому вам не нужно беспокоиться о попытках применить его решение.Вместо этого ваша проблема заключается в том, что какая-то другая программа использует сокет 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.

...