一個團隊正在開發一個struts應用程序。團隊成員正在使用許多不同的操作系統。struts 2 Fedora上的TomCat中的NoSuchFieldError原型
我們使用的是Java 8.在那一刻,我使用1.8.0_152-B16,但我已經測試使用Java 8的多個版本,包括131和144
我目前使用Tomcat 23年8月5日,但也嘗試過8.0.20和9.0.1。
我安裝TomCat,解壓tar.gz版本,然後修改tomcat-users.xml文件。
通過放置WAR文件進行部署。
在Fedora 22和Fedora 26,我看到在本地主機日誌文件中出現以下錯誤:
17-Oct-2017 17:06:13.077 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [struts2]
java.lang.NoSuchFieldError: PROTOTYPE
at org.apache.struts2.config.DefaultBeanSelectionProvider.register(DefaultBeanSelectionProvider.java:389)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:226)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:897)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:437)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:478)
at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:75)
at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:63)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:266)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4591)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5233)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:988)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1860)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
web.xml文件如下:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Struts 2 Web Application</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
我看到這個錯誤一臺舊版的Fedora 22電腦。然後我測試了一個新安裝的Fedora 26.奇怪的是,我可以將WAR文件放到CENTOS,Ubuntu和Windows 7上,沒有任何問題。我只在Fedora機器上看到這個錯誤。
我對struts瞭解不多,但我已經使用了很長時間的Java。
我瞭解NoSuchFieldError的含義,它讓我懷疑某些jar文件的版本不正確,但我覺得在Fedora上看到錯誤,但在其他一些操作上看起來很奇怪系統。
任何幫助診斷這個問題表示讚賞。
所以現在我只需要弄清楚Fedora機器上的問題,而不是其他問題。謝謝! – Andrew
@Andrew,是的,您可以使用'-XX:+ TraceClassLoading -XX:+ TraceClassUnloading' java選項:) –