java - 如何让 Netbeans 9 在 Tomcat 上部署有效的 webapp
问题描述
我有一个正在运行的 Tomcat 实例;
- 雄猫 9.0.10
- OpenJDK 10.0.2
我有一个在库 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 似乎正在构建一些不同的东西,并且报告的错误并没有太大帮助。
有什么线索吗?
解决方案
首先,注意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.gz在URL字段,然后单击OK。
- 这应该在“设置”选项卡的“更新中心配置”列表中创建一个新条目。
- 检查新条目是否应立即将插件添加到可用插件选项卡。就我而言,它添加了 43 个条目。
- 单击“可用插件”选项卡,然后单击“类别”列按类别对条目进行排序。
- 检查类别Java Web 和 EE的所有条目,然后单击安装按钮。
- 插件将被下载并安装。要确认这一点,请单击已安装选项卡。您应该会看到刚刚添加的插件,例如Java EE Base和RESTful Web Services。
之后,您应该正确启用 Java EE 功能。那么您能否添加该功能,然后重试部署并提供建议?
推荐阅读
- c# - 什么是 C# 中的元帅?我在哪里可以找到副本。元帅
- python - 从 Qt 小部件应用程序调用 pyqt 小部件
- fpdf - LARAVEL 5.7 FPDF - 更改 PDF 方向的配置文件不起作用
- angular - 我在 IIS 上托管的 Angular 应用程序的 IE 中没有显示 Favicon
- vim - vim - 如何选择多行?
- react-native - 如何调试未打开的 ReactNative 应用程序
- tcl - 如何在 tcl 脚本中对列表进行分组
- react-native - 无法访问反应导航中的道具
- python - 写入类型错误时:不支持的操作数类型 -: 'float' 和 'str'
- angular - 如何使用拖放在两个不同的网格(Ag-grid Angular 6)之间传输行?