【问题标题】:java.lang.NoSuchFieldError: IS_SECURITY_ENABLEDjava.lang.NoSuchFieldError: IS_SECURITY_ENABLED
【发布时间】:2013-01-04 15:24:04
【问题描述】:

我想将服务部署到 2 台服务器。我在一台服务器上成功,但在另一台服务器上失败。事实上,我尽我所能使他们的环境相同。错误日志如下:

2013-01-21 22:08:18.178:WARN:oejuc.AbstractLifeCycle:FAILED jsp: java.lang.NoSuchFieldError: IS_SECURITY_ENABLED
java.lang.NoSuchFieldError: IS_SECURITY_ENABLED
    at org.apache.jasper.compiler.JspRuntimeContext.<init>(JspRuntimeContext.java:197)
    at org.apache.jasper.servlet.JspServlet.init(JspServlet.java:150)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:492)
    at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:312)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:776)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1213)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.java:36)
    at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:183)
    at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:491)
    at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:138)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:142)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:53)
    at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:604)
    at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:535)
    at org.eclipse.jetty.util.Scanner.scan(Scanner.java:398)
    at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:332)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.java:118)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.java:552)
    at org.eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.java:227)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:58)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:53)
    at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:91)
    at org.eclipse.jetty.server.Server.doStart(Server.java:263)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
    at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1215)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1138)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.jetty.start.Main.invokeMain(Main.java:457)
    at org.eclipse.jetty.start.Main.start(Main.java:602)
    at org.eclipse.jetty.start.Main.main(Main.java:82)

感谢您的任何帮助。

【问题讨论】:

    标签: java eclipse jsp jetty maven-jetty-plugin


    【解决方案1】:
    java.lang.NoSuchFieldError: IS_SECURITY_ENABLED
    

    这是 Jasper JSP 编译器内部类之一的一部分。此错误表明您(或 Maven)出于某种原因将 Jasper JSP 编译器 JAR 文件包含在 webapp 的 /WEB-INF/lib 文件夹中,而这些 JAR 文件应该已由目标容器(在您的情况下为 Jetty)提供。

    这种方式只有在您的 web 应用程序包含与目标容器所具有的完全相同版本的 Jasper JAR 文件时才有效。但是,这毕竟不是正确的做法。那些 Jasper JAR 文件不属于 webapp 的/WEB-INF/lib。它们应该已经由目标容器提供。您需要在 webapp 的 /WEB-INF/lib 中删除它们。

    我不是 Maven 英雄,但是,您需要告诉它不要将 Jasper JAR 文件包含在构建的 WAR 的 /WEB-INF/lib 文件夹中。您可以通过将他们的dependency scope 设置为provided 来做到这一点。

    【讨论】:

    • 您好@BalusC,感谢您的回答。实际上,我将整个项目从正常运行的服务器复制到新服务器,新服务器上仍然存在问题。顺便说一句,两台服务器获得相同的 java 版本。 [java 版本“1.6.0_25”,Java(TM) SE 运行时环境(构建 1.6.0_25-b06),Java HotSpot(TM) 64 位服务器 VM(构建 20.0-b11,混合模式)]
    • 如已回答,清理您的运行时类路径以摆脱流氓 Jasper JSP 编译器 JAR 文件。查看构建的 WAR 文件的 /WEB-INF/lib 文件夹。它不应包含任何特定于容器的 JAR 文件。
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 2015-10-10
    • 2013-06-05
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多