运行CodeServer时遇到bindException

问题描述 投票:0回答:1

我维护一个 GWT 多模块 Maven 项目,其历史可以追溯到美好的黄金 GWT 时代。 到目前为止,我们能够依靠经典开发模式调试 GWT 应用程序,但现在由于 出于安全考虑,我们正在尝试设置我们的开发环境(Eclipse IDE)以使用超级开发模式。

但是当涉及到开发时,因此运行超级开发模式,当我们尝试启动CodeServer时,我们遇到了bindException(端口冲突)。

请在下面找到使用的配置以及我们遇到的异常:

超级开发模式(启动器配置)

main class: com.google.gwt.dev.DevMode
-logLevel INFO -port 8889 -remoteUI "${gwt_remote_ui_server_port}:${unique_id}" -codeServerPort 9997 -war {directory to web app} -workDir {work directory} {module}

观察:

超级开发模式正确启动并已配置为在端口 9997 上运行:

http://127.0.0.1:8889/app.html

下一步是我尝试启动 CodeServer:

CodeServer(启动器配置)

main class: com.google.gwt.dev.codeserver.CodeServer
-logLevel INFO -port 9876 -workDir {work directory} -src src/ {module}

观察:

出现以下异常,随后代码服务器从未启动。

[main] 警告 org.eclipse.jetty.util.component.AbstractLifeCycle - 失败 ServerConnector@5c168f93{HTTP/1.1}{127.0.0.1:9876}:java.net.BindException:地址已在使用中 java.net.BindException:地址已在使用中

从那里,我看不到其他线索(错误输出或堆栈跟踪)。 到目前为止,在这个问题上花了三天时间后,我们似乎遇到了麻烦。

我的疑问如下:

  1. CodeServer 和超级开发模式之间的端口肯定会发生冲突。如何将 CodeServer 和 Super Dev 模式配置为在同一端口上工作?
  2. 启动超级开发模式时,它内部是否也会默认在端口 9876 上启动一个代码服务器实例。

如果您面临类似的障碍,很乐意分享我的发现。

最好的,贾维德

p.s.:在 Java 8 环境中,我能够使用 GWT 2.9.0,它是超级开发模式(通过 Eclipse 和 thomas broyer 的 gwt-maven-plugin)。 @tbroyer p.s: 当访问模块网页时,它仍然在端口 9876 上连接到 codeserver(尽管 codeserver 已配置为在 9877 上运行)

gwt gwt-maven-plugin
1个回答
0
投票

首先需要澄清一点:

CodeServer
超级开发模式,就像
DevMode
一样。
CodeServer
DevMode
之间的主要区别在于
DevMode
also 默认在端口 8888 上启动一个简单的应用程序服务器。

因此,您不应在同一个项目中同时运行

CodeServer
DevMode
。如果您同时运行两个项目,自然会出现某种冲突,因此需要选择不同的端口。话虽如此,CodeServer/DevMode 能够同时运行多个模块,只要它们的类路径兼容即可。

最后,运行

DevMode
来运行内置 Jetty 在 GWT 中已被弃用(并且在
net.ltgt.gwt.maven
插件中也不鼓励使用,请参阅 https://github.com/tbroyer/gwt-maven-archetypes/? tab=readme-ov-file#start-the-development-mode - Windows 除外,除非您应用链接问题的解决方法) - 相反,运行您自己的开发服务器,使用
CodeServer
launcherDir
(或 DevMode 的
warDir
)设置为创建 JS 内容,您自己的开发服务器可以在浏览器更改时提供给浏览器(就像您手动编辑 js/html/css 或使用 npm/etc 一样)。


如果上述方法不能解决您的问题,您可能会遇到这样的问题:即使服务器已停止,浏览器仍保持连接到端口

9876
,因此您无法重新启动服务器。我已提交 https://github.com/gwtproject/gwt/issues/9944 并将很快发布补丁来解决此问题。

这是完整的堆栈跟踪,它显示 CodeServer 作为 DevMode 的一部分被调用,完成自己的工作(并显示您所看到的异常):

     [java] java.io.IOException: Failed to bind to /127.0.0.1:9876
     [java]     at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:349)
     [java]     at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:310)
     [java]     at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
     [java]     at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:234)
     [java]     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
     [java]     at org.eclipse.jetty.server.Server.doStart(Server.java:401)
     [java]     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
     [java]     at com.google.gwt.dev.codeserver.WebServer.start(WebServer.java:138)
     [java]     at com.google.gwt.dev.codeserver.CodeServer.start(CodeServer.java:162)
     [java]     at com.google.gwt.dev.codeserver.CodeServer.main(CodeServer.java:104)
     [java]     at com.google.gwt.dev.codeserver.CodeServer.main(CodeServer.java:55)
     [java]     at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
     [java]     at java.base/java.lang.reflect.Method.invoke(Method.java:580)
     [java]     at com.google.gwt.dev.shell.SuperDevListener.runCodeServer(SuperDevListener.java:112)
     [java]     at com.google.gwt.dev.shell.SuperDevListener.start(SuperDevListener.java:91)
     [java]     at com.google.gwt.dev.DevMode.ensureCodeServerListener(DevMode.java:666)
     [java]     at com.google.gwt.dev.DevModeBase.doStartup(DevModeBase.java:785)
     [java]     at com.google.gwt.dev.DevMode.doStartup(DevMode.java:551)
     [java]     at com.google.gwt.dev.DevModeBase.startUp(DevModeBase.java:888)
     [java]     at com.google.gwt.dev.DevModeBase.run(DevModeBase.java:705)
     [java]     at com.google.gwt.dev.DevMode.main(DevMode.java:432)
     [java] Caused by: java.net.BindException: Address already in use
     [java]     at java.base/sun.nio.ch.Net.bind0(Native Method)
     [java]     at java.base/sun.nio.ch.Net.bind(Net.java:565)
     [java]     at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:344)
     [java]     at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:301)
     [java]     at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:89)
     [java]     at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
     [java]     ... 20 more
© www.soinside.com 2019 - 2024. All rights reserved.