java - 错误的 java.net.BindException : Address already in use on Jetty

标签 java maven continuous-integration jetty rhel

在我的 CI 服务器上,我有一个需要启动 Jetty 服务器的测试。
测试是这样的:

  1. 生成随机端口(在合法的 TCP 端口范围内使用 java rand)。
  2. 使用 Linux 的 fuser 验证以检查未使用的端口
  3. 运行测试

偶尔,即使在验证端口空闲后,我也会得到异常:


WARN:oejuc.AbstractLifeCycle:FAILED SelectChannelConnector@0.0.0.0:49277 FAILED: java.net.BindException: Address already in use
java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind0(Native Method)
    at sun.nio.ch.Net.bind(Net.java:444)
    at sun.nio.ch.Net.bind(Net.java:436)
    at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
    at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
    at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:172)
    at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:300)
    at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:249)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.eclipse.jetty.server.Server.doStart(Server.java:272)
    at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511)
    at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
    at org.mortbay.jetty.plugin.JettyRunWarMojo.execute(JettyRunWarMojo.java:71)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)

运行的测试:

  • RHEL 6.3 主机
  • maven 3.0.4
  • jetty-maven-plugin:7.5.4
  • Java 1.7.51

可能是什么原因?

谢谢!

最佳答案

当 Jetty 尝试启动时,端口 49277 上已经有一个进程。

没办法。

您可以询问 Linux 正在监听什么,并查看正在使用该端口的进程。

$ netstat -tlnp

但是,如果您只需要一个 Jetty 可以启动和监听的随机端口,只需将 Jetty 应该使用的端口设置为 0,这将告诉 TCP to randomly assign an available port when binding for listening .

然后你的任务是找出 Jetty 在启动后监听的端口。

关于java - 错误的 java.net.BindException : Address already in use on Jetty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497308/

相关文章:

java - java中如何将数据从一个对象列表复制到另一个对象列表?

java - 如何在 Apache Camel/CXF REST web 服务中访问 POST/PUT 请求的 JSON 请求体

java - 在Java中的测试类中实例化要测试的类

java - 如何为 java SDK 客户端项目同时支持 maven 和 gradle

java - Jenkins 问题 : local class incompatible by comparing serialVersionUID

ios - PackageApplication 今天停止使用 OS X 10.10 (Yosemite)

java - 如何获取已终止的 Java 线程的中断状态?

java - 由: java. lang.NoSuchMethodError : org. springframework.data.mongodb.core.MongoTemplate.<init>(Lcom/mongodb/Mongo;Ljava/lang/String;)V引起

tomcat - 如何使用单个命令部署和安装

continuous-integration - 构建后 VSTS 触发器发布和部署