2010-05-06 91 views
0

我使用eclipse开发基于Web的Java应用程序。我的正常业务是抓下一个任务跟踪票。如果有需要纠正的问题,我在本地运行应用程序,加载Jetty Web服务器,并绑定到端口8080.在验证问题后,我解决了问题,重新构建并重新运行应用程序。问题是,我经常忘记在重新运行之前关闭码头服务器。这将生成的Java绑定错误:使用Eclipse,Java和Windows进行端口绑定“问题”

WARNING: failed [email protected]:8080: java.net.BindException: Address already in use: JVM_Bind 

我工作在Windows中,并看看是否有命令,我可以运行未绑定的端口,但找不到答案在那里。有没有人在这里有一个好主意来解决我的问题,除了记得在开始新的码头之前关闭旧的码头实例?

感谢, 周杰伦

回答

0

您sortof回答了自己的问题......有,因为你不能在同一端口上运行两个应用程序,你需要记住开始一个新之前关闭旧的一。

你提到应用程序启动了一个Jetty实例,启动应用程序可以在启动之前检查它是否已经运行吗?我想我和你不在同一页...

但是,有一些很好的方法可以“热部署”你的修改 - 一旦你运行了appserver,你可以修改JSP文件或Java类,它会自动部署这些更改。

您是否在使用像run-jetty-run这样的集成?如果没有,你可能想尝试一下。

MyEclipse也想到了,虽然我不是一个很大的粉丝,有人真的很喜欢它。

但大多数情况下,请记住停止并重新启动。

+0

好点,我用JRebel的热重新编译 – Jay 2010-05-06 16:36:51

1
  1. 使用netstat -ap | grep 8080来查找哪个进程正在使用该端口。 (什么,你没有在Windows上安装合适的grep?每个人都应该!)
  2. 使用-Djetty.port=<port number>更改Jetty使用的默认端口号。
+0

你会推荐什么样的grep安装?免费是优先考虑的。 – Jay 2010-05-06 17:26:28

+0

@Jay,Cygwin和msysgit都包含grep,都可以正常工作。 http://www.cygwin.com/ http://code.google.com/p/msysgit/ – 2010-05-06 17:35:52

+0

netstat -aon |找到/我“听”在定期赢得命令行 – 2012-01-26 12:54:24

1

要彻底解除端口绑定,通常需要停止将进程保持打开的进程(否则,进程可能会因无法避免的奇怪通信错误而死亡)。

您可以对短批处理文件进行检测,以检测端口是否正在使用并终止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 
)