【问题标题】:I got problem to run JSP and Servlet on Netbeans IDE我在 Netbeans IDE 上运行 JSP 和 Servlet 时遇到问题
【发布时间】:2021-07-04 16:56:35
【问题描述】:

我在 Apache Netbeans 12.3 JDK 16.0 上运行 JSP 文件时遇到问题,我在 macOS BigSur 上使用的是 tomcat 9.0.45。我不确定实际上是什么问题。你能帮帮我吗?当我运行 servlet 文件时,我收到了这个错误消息。

java.lang.IllegalAccessError: class org.netbeans.modules.tomcat5.deploy.TomcatManagerImpl (in unnamed module @0x19f724b9) cannot access class com.sun.org.apache.xerces.internal.impl.dv.util.Base64 (in module java.xml) because module java.xml does not export com.sun.org.apache.xerces.internal.impl.dv.util to unnamed module @0x19f724b9
    at org.netbeans.modules.tomcat5.deploy.TomcatManagerImpl.run(TomcatManagerImpl.java:533)
    at org.netbeans.modules.tomcat5.deploy.TomcatManagerImpl.list(TomcatManagerImpl.java:372)
    at org.netbeans.modules.tomcat5.deploy.TomcatManager.modules(TomcatManager.java:718)
    at org.netbeans.modules.tomcat5.deploy.TomcatManager.getAvailableModules(TomcatManager.java:529)
    at org.netbeans.modules.tomcat5.optional.TMIDResolver.lookupTargetModuleID(TMIDResolver.java:56)
    at org.netbeans.modules.j2ee.deployment.impl.TargetServer.checkUndeployForSharedReferences(TargetServer.java:349)
    at org.netbeans.modules.j2ee.deployment.impl.TargetServer.checkUndeployForSharedReferences(TargetServer.java:322)
    at org.netbeans.modules.j2ee.deployment.impl.TargetServer.checkUndeployForSharedReferences(TargetServer.java:319)
    at org.netbeans.modules.j2ee.deployment.impl.TargetServer.processLastTargetModules(TargetServer.java:440)
    at org.netbeans.modules.j2ee.deployment.impl.TargetServer.init(TargetServer.java:170)
    at org.netbeans.modules.j2ee.deployment.impl.TargetServer.deploy(TargetServer.java:605)
    at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:221)
    at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:141)
    at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:86)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at jdk.internal.reflect.GeneratedMethodAccessor59.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
    at org.apache.tools.ant.Task.perform(Task.java:350)
    at org.apache.tools.ant.Target.execute(Target.java:449)
    at org.apache.tools.ant.Target.performTasks(Target.java:470)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1391)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1254)
    at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:261)
    at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:574)
    at org.netbeans.core.execution.RunClassThread.doRun(RunClassThread.java:132)
    at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
    at org.openide.util.lookup.Lookups.executeWith(Lookups.java:278)
    at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:81)

【问题讨论】:

  • 你使用 JPMS(java 9+ 模块)吗?
  • 我不确定。如何检查?
  • 是否有一个名为module-info.java的文件?
  • 我看过了,是的,我拿到了文件
  • 研究这个问题是没有意义的,因为你的环境是无效的; NetBeans 12.3 不支持 JDK 16。如果在使用受支持的 JDK 15 时问题仍然存在,请更新您的问题。

标签: java netbeans macos-big-sur


【解决方案1】:

在 Java 9 中,引入了 Java 平台模块系统。

这也增加了访问规则。

在您的情况下,模块java.xml 不会导出com.sun.org.apache.xerces.internal.impl.dv.util.Base64,但tomcat 仍会尝试访问它(您使用的tomcat 版本可能不支持JPMS)。

您可以尝试以下三种不同的方法:

更新 Tomcat

较新版本的 tomcat 可能已修复此问题。例如,tomcat 10 似乎支持 JPMS。

--add-exports java.xml/com.sun.org.apache.xerces.internal.impl.dv.util=ALL-UNNAMED 添加到 JVM 参数中。

启动tomcat时,可​​以在启动tomcat的命令中添加JVM参数--add-exports java.xml/com.sun.org.apache.xerces.internal.impl.dv.util=ALL-UNNAMED。由于 tomcat 可能是通过脚本启动的,因此此行为可能由环境变量控制。许多脚本为此使用环境变量JAVA_OPTS。如果在启动 tomcat 之前将环境变量 JAVA_OPTS 设置为 --add-exports java.xml/com.sun.org.apache.xerces.internal.impl.dv.util=ALL-UNNAMED(或将其添加到环境变量中),它可能会被拾取。或者,您可以手动将其添加到命令中,或使用由 JVM 自动获取的环境变量(如 JAVA_TOOL_OPTIONS)。

这会将模块 java.xml 配置为将包导出到所有未命名的模块(包括 tomcat),即使它默认不这样做。

Java Platform, Standard Edition Oracle JDK 9 Migration Guide

如果您需要使用无法访问的内部 API,请使用 --add-exports 运行时选项。您还可以在编译时使用 --add-exports 来访问内部 API。

请参阅 the docs 了解 --add-exports 的作用详情。

删除module-info.java

通过这样做,Java 可能会退回到旧的非 JPMS 行为。

【讨论】:

  • 用于将 --add-exports java.xml/com.sun.org.apache.xerces.internal.impl.dv.util=ALL-UNNAMED 添加到 JVM 参数(例如使用 JAVA_OPTS) . .我真的不明白。你能解释一下吗
  • 当你启动tomcat时,你启动了一个java程序。这是使用类似java -jar tomcat.jar 的东西来完成的。您可以在 JAR 之前添加 --add-exports jvm 参数。由于 tomcat 可能是由脚本启动的,因此您可能希望将选项添加到环境变量 JAVA_OPTS,因为许多此类脚本将此环境变量的内容附加到 JVM 参数中。
【解决方案2】:

NetBeans 12.3 不支持 JDK 16,因此您尝试执行的操作不受支持。

请参阅 NetBeans 12.3 文档中关于 Deployment Platforms 的部分:

Apache NetBeans 12.3 在 JDK LTS 版本 8 和 11 以及 JDK 15,即本 NetBeans 时的当前 JDK 版本 释放。

因此,请尝试将 NetBeans 配置中的 JDK 16 替换为 JDK 15,看看问题是否会消失。如果使用 Java 15 时问题仍然存在,请通过将 JDK 16 堆栈跟踪替换为 JDK 15 堆栈跟踪来更新您的问题。

另外,由于您提到您正在使用 Big Sur,您可能还需要查看 NetBeans 错误报告 NETBEANS-5037 NetBeans dialog windows in Big Sur。这可能与您无关,但 NetBeans 12.3 版本文档中也提到了它:

当前的 JDK 在 macOS Big Sur 上存在问题,导致冻结 在对话框上。这可以通过应用所描述的解决方法来解决 在 NETBEANS-5037。

【讨论】:

  • 如何自动从 jdk 16 更改为 15。因为如果我在 web 文件的属性中手动执行此操作。我的 netbeans 会滞后,我需要重新打开 netbeans。然后在我运行 JSP 之后没有任何反应。但是当我运行整个项目时,我得到了问题中显示的错误。
  • @NURMAHDIAHSALEH 您不能“自动从 jdk 16 更改为 15”...您必须下载/安装 JDK 15,然后将 JDK 15 添加为 NetBeans 中的 Java 平台,然后重新构建/使用 JDK 15 而不是 JDK 16 重新部署您的 Web 项目。但是 JDK 15 所需的步骤与您已经为 JDK 16 采取的步骤没有什么不同。还是我误解了您的担忧?
  • 怎么改?在终端?
  • @ 否。第 1 步:下载并安装 JDK 15。第 2 步:使用 Tools > Java Platforms > Add Platform... 步骤将其添加为 NetBeans 中的 Java 平台3:使用 JDK 15 而不是 JDK 16 重新构建您的项目。执行此操作的方法因构建工具(Ant、Maven 等)而异。 第 4 步:将 JDK 15 应用程序重新部署到 Tomcat。但是您肯定已经使用 Java 16 完成了所有这些工作,对吧? JDK 15 的步骤与 JDK 16 的步骤完全相同。
猜你喜欢
  • 2017-02-16
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2019-11-24
  • 2023-02-07
  • 2011-12-30
相关资源
最近更新 更多