«проблема» привязки портов в Eclipse, Java и Windows - PullRequest
0 голосов
/ 06 мая 2010

Я использую eclipse для разработки веб-приложения Java. Мой нормальный ход бизнеса - взять билет на отслеживание следующей задачи. Если есть проблема, которую необходимо исправить, я запускаю приложение локально, который загружает веб-сервер Jetty и привязывается к порту 8080. После проверки проблемы я устраняю проблему, перестраиваю и перезапускаю приложение. Проблема в том, что я слишком часто забываю закрыть сервер Jetty перед повторным запуском. Это приводит к ошибке связывания Java:

WARNING: failed SocketConnector@0.0.0.0:8080: java.net.BindException: Address already in use: JVM_Bind

Я работаю в Windows и искал, есть ли команда, которую я мог бы запустить, чтобы отсоединить порт, но не смог найти ответ там. Кто-нибудь здесь имеет хорошее представление о том, как решить мою проблему, кроме как не забыть закрыть старый экземпляр Jetty перед запуском нового?

Спасибо, Jay

Ответы [ 3 ]

1 голос
/ 06 мая 2010
  1. Используйте netstat -ap | grep 8080, чтобы узнать, какой процесс использует этот порт.(Что, у вас не установлена ​​подходящая grep в Windows? Все должны!)
  2. Используйте -Djetty.port=<port number>, чтобы изменить номер порта по умолчанию, используемый Jetty.
1 голос
/ 06 мая 2010

Чтобы правильно отсоединить порт, обычно нужно остановить процесс, который удерживает его открытым (в противном случае процесс, возможно, все равно умрет со странными ошибками связи).

Вы можете исправить короткий командный файл, чтобы определить, используется ли порт, и завершить процесс Jetty. Предполагая, что у вас есть Sysinternal's pskill.exe , доступный по вашему пути (например, в C: \ Windows), вот пример, который убьет процесс, который удерживает порт 8080 открытым:

FOR /F "skip=4 tokens=2,5" %%G IN ('netstat -ano') DO (
  IF "%%G"=="127.0.0.1:8080" pskill %%H
)
0 голосов
/ 06 мая 2010

Вы вроде как ответили на свой собственный вопрос ... поскольку вы не можете запустить два приложения на одном и том же порту, вам нужно не забыть закрыть старое, прежде чем начинать новое.

Вы упомянули, что приложение запускает экземпляр Jetty, может ли запуск приложения проверить, запущено ли оно до этого? Я думаю, что я не совсем на той же странице, что и вы ...

Однако есть несколько изящных способов «горячего» развертывания ваших изменений - после запуска сервера приложений вы можете вносить изменения в файлы JSP или классы Java, и он автоматически развертывает эти изменения.

Используете ли вы какую-то интеграцию, например run-jetty-run ? Если нет, вы можете попробовать.

MyEclipse также приходит на ум, хотя я не большой поклонник этого, некоторым людям это действительно нравится.

Но, по большей части, просто не забудьте остановиться и перезапустить.

...