2017-10-17 1 views
0

팀이 스트럿츠 애플리케이션을 개발 중입니다. 팀 구성원은 다양한 운영 체제를 사용하고 있습니다.스트럿츠 2 Fedora에서 TomCat의 NoSuchFieldError PROTOTYPE

나는 현재 톰캣 8.5.23 사용하고 (131) 및 (144)를 포함하여 자바 (8)의 여러 버전을 사용

우리는이 순간 자바 (8)을 사용하고, 나는 1.8.0_152-B16를 사용하고,하지만 테스트 한 , 8.0.20과 9.0.1도 시도했다.

tar.gz 버전의 압축을 풀고 tomcat-users.xml 파일을 수정하여 TomCat을 설치합니다.

배치는 WAR 파일을 제자리에 놓음으로써 수행됩니다.

은 페도라 22 페도라 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 컴퓨터. 이상하게도 WAR 파일을 CENTOS, Ubuntu 및 Windows 7에 문제없이 배치 할 수 있다는 것입니다. Fedora 컴퓨터에서만이 오류가 표시됩니다.

저는 스트럿에 대해 많이 알지는 않지만 오랫동안 자바를 사용해 왔습니다.

NoSuchFieldError의 의미를 이해하고 잘못된 jar 파일 버전을 사용하고있는 것으로 의심되지만 Fedora에서는 오류가 발생하지만 다른 운영 체제에서는 작동하지 않습니다. 체계.

이 문제를 진단하는 데 도움이 되시길 바랍니다.

답변

1

그것은 /com/opensymphony/xwork2/inject/Scope.classthis commit에 따라 PROTOTYPE로 변경이 날짜 DEFAULT에서 년 6 월 18 일 2015 년 이상 이전에 의해 무시 된 듯 보이지만 그것은 하나 개의 클래스가로드 이전을 보인다.

+0

그래서 이제는 페도라 기기가 아닌 다른 기기에서 어디서 오는 것인지 알아야합니다. 감사! – Andrew

+0

@Andrew, 네,'-XX : + TraceClassLoading -XX : + TraceClassUnloading' 자바 옵션을 사용할 수 있습니다 :) –