2015-02-13 2 views
3

На моем сервере CI у меня есть тест, который должен запустить сервер Jetty.
Тест выглядит следующим образом:
False java.net.BindException: адрес уже используется на Jetty

  1. Генерация случайного порт (с использованием Java рандов в TCP легального диапазоне портов).
  2. Validate с помощью системы Linux fuser, чтобы проверить, что порт в не используется
  3. Выполнить тесты

Иногда, даже после проверки порт свободен, я получаю исключение:


WARN:oejuc.AbstractLifeCycle:FAILED [email protected]: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
  • пристани-Maven-плагин: 7.5.4
  • Java 1.7.51

Что, возможно, может быть причиной?

Спасибо!

+0

Похоже, что на порте '49277' выполняется процесс на этапе – Jens

+0

Но я не проверял, что процесс не выполняется как раз перед ... путем запуска 'fuser' –

ответ

4

Существует процесс на порту 49277 уже, когда Jetty пытается запустить.

Ни в коем случае.

Вы можете спросить Linux, что слушает, и посмотреть, какой процесс использует этот порт.

$ netstat -tlnp 

Однако, если все, что вы хотите случайный порт, который может Jetty запуска и слушать, просто установите порт, причал должен использовать для 0, и что скажет TCP to randomly assign an available port when binding for listening.

Ваша задача - выяснить, какой порт Jetty прослушивает после запуска.

+0

Спасибо! Это действительно странно 49277 генерируется случайный порт. Более того, как написано, я проверяю, что этот порт свободен, запустив «фьюзер» непосредственно перед выполнением причала. Есть ли вероятность, что проверка порта неверна? –

0

Возможно, вы используете tomcat на порту 8080, пожалуйста, остановите сервер tomcat и снова запустите причал от maven.

Смежные вопросы