首页 > 解决方案 > 如何让 Netbeans 9 在 Tomcat 上部署有效的 webapp

问题描述

我有一个正在运行的 Tomcat 实例;

我有一个在库 JDK1.8 上编译的工作 Netbeans 8.2 项目,它可以在上面的服务器上构建和部署并运行良好。

我现在正尝试迁移到 Netbeans 9,所以我在 OpenJDK 10.0.2 JDK 上运行了一个。如果我构建相同的项目(仍然在 Library JDK1.8 上),它的构建和部署都很好。但是,当它在同一台服务器上运行时,出现以下错误;

javax.servlet.ServletException: Error instantiating servlet class [xxxx.xxx.xxx.TestServlet]
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:844)
Root Cause

java.lang.RuntimeException: 
    xxxx.xxx.xxx.TestServlet.<init>(TestServlet.java:1)
    java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:844)
Note The full stack trace of the root cause is available in the server logs.

(xxxx.xxx.xxx.TestServlet 替换为真正的 Servlet 类)

它抱怨 Servlet 的第一行实际上是模板注释的“/*”。

我会认为我使用的任何 Netbeans,如果两者都再次编译相同的 JDK1.8 JDK,那么部署的 WAR 应该是相同的并且都可以工作。Netbeans 9 似乎正在构建一些不同的东西,并且报告的错误并没有太大帮助。

有什么线索吗?

标签: javatomcatnetbeansnetbeans-9

解决方案


首先,注意Netbeans 9.0 RC1 只支持 Java SE 开发...

9.0 版,这将是一个仅用于 Java SE 开发的 IDE其他功能尚未由 Oracle 捐赠,正在审核和处理中,并将成为 Apache NetBeans 后续版本的一部分。

也就是说,Apache NetBeans 9 的早期 beta 版本提供了允许构建 Java EE 应用程序的插件,一旦 NetBeans 9.0 发布,该功能将重新引入

Oracle 已审核并捐赠了所有功能模块,以提供对 JavaScript、PHP、Groovy 和企业 Java(即 Java EE 或现在众所周知的 Jakarta EE)的支持。这些功能位于 Apache NetBeans Git 存储库中的一个单独分支上。在 Apache NetBeans (incubating) 9.0 发布后,它们将被集成,即重新授权给 Apache。

您没有指定您使用的是哪个版本的 NetBeans 9(过去几个月有很多),但是如果您下载 NetBeans 9.0 RC1,它没有提供创建Java Web应用程序的向导,也无法添加Tomcat 或 Wildfly 等应用程序服务器,也没有提供任何合适的插件。因此,大概不正式支持 Java SE 范围之外的任何内容,例如 Web 应用程序的部署。

但是,您仍然可以手动添加插件(风险自负)以在 Apache NetBeans 9.0 中启用 Java EE 功能:

  • 工具 > 插件 > 设置选项卡>单击添加按钮
  • 更新中心定制器屏幕上的名称字段中输入一些值(例如“我的插件”),http://updates.netbeans.org/netbeans/updates/8.2/uc/final/distribution/catalog.xml.gzURL字段,然后单击OK
  • 这应该在“设置”选项卡的“更新中心配置”列表中创建一个新条目。
  • 检查新条目是否应立即将插件添加到可用插件选项卡。就我而言,它添加了 43 个条目。
  • 单击“可用插件”选项卡,然后单击“类别”列按类别对条目进行排序。
  • 检查类别Java Web 和 EE的所有条目,然后单击安装按钮。
  • 插件将被下载并安装。要确认这一点,请单击已安装选项卡。您应该会看到刚刚添加的插件,例如Java EE BaseRESTful Web Services

之后,您应该正确启用 Java EE 功能。那么您能否添加该功能,然后重试部署并提供建议?


推荐阅读