如何让Netbeans 9在Tomcat上部署有效的webapp

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

  • Tomcat 9.0.10
  • OpenJDK 10.0.2

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

我现在正试图转向Netbeans 9,所以我在OpenJDK 10.0.2 JDK上运行。 如果我构建相同的项目(仍然在库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.(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似乎正在构建不同的东西,报告的错误并没有多大帮助。

有什么线索吗?

首先,请注意Netbeans 9.0 RC1仅支持Java SE开发 ……

版本9.0,它将仅是用于Java SE开发的IDE其他function尚未由Oracle捐赠 ,正在进行审计和处理,并成为Apache NetBeans后续版本的一部分。

也就是说,Apache NetBeans 9的早期测试版提供了允许构建Java EE应用程序的插件,并且一旦NetBeans 9.0发布 , 该function将重新引入 :

Oracle已经审计并捐赠了所有模块,以支持JavaScript,PHP,Groovy和企业Java(即Java EE,或者现在已知的Jakarta EE)。 这些function位于Apache NetBeans Git仓库的单独分支上。 Apache NetBeans(孵化)9.0发布后,它们将被集成,即重新许可给Apache。

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

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

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

之后,您应该正确启用Java EEfunction。 那么您可以添加该function,然后重试您的部署并提出建议吗?