jetty NoSuchFieldError: MAX_INACTIVE_MINUTES

3532 ワード

Jettyテストの場合、異常を報告するのは以下の通りです.
java.lang.reflect.InvocationTargetException
     at sun.reflect.NativeMethodAccessorImpl.invoke0( Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
     at java.lang.reflect.Method.invoke(Unknown Source)
     at org.eclipse.jetty.webapp.IterativeDescriptorProcessor.visit(IterativeDescriptorProcessor.java:83)
     at org.eclipse.jetty.webapp.IterativeDescriptorProcessor.process(IterativeDescriptorProcessor.java:70)
     at org.eclipse.jetty.webapp.MetaData.resolve(MetaData.java:402 )
     at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1339)
     at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:772)
     at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:263)
     at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:517 )
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
     at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132)
     at org.eclipse.jetty.server.Server.start( Server.java:405)
     at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:106)
     at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
     at org.eclipse.jetty.server.Server.doStart(Server.java:372 )
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
     at soc.main.SocMain.main( SocMain.java:41)
Caused by: java.lang.NoSuchFieldError: MAX_INACTIVE_MINUTES
     at org.eclipse.jetty.webapp.StandardDescriptorProcessor.visitSessionConfig(StandardDescriptorProcessor.java:653)
     ... 19 more

つまりStandardDescriptorProcessorクラスにMAX_がありませんINACTIVE_MINITESという属性.この属性はjetty-serverパッケージのAbstractSessionManagerクラスのこの属性を参照します.すなわち,依存するjetty-serverパケットの下にはこの属性がない.また、
NoSuchFieldErrorおよびNoSuchMethodErrorの多くはjarパッケージのバージョンが間違っているため、jetty関連jarパッケージを以下のように表示します.
            <dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-webapp</artifactId>
			<version>9.3.8.v20160314</version>
		</dependency>

                ……………………
                
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-servlet</artifactId>
			<version>9.3.7.v20160115</version> 
		</dependency>

jetty-webappとjetty-servletは異なるバージョンであることがわかります.私の依存にはjetty-serverパッケージがありません.少なくとも1つのパッケージがjetty-serverパッケージに依存しているに違いありません.jetty-webappはjetty-servletに依存し、jetty-servletはjetty-securityに依存し、jetty-securityはjetty-serverパッケージに依存し、jetty-server 9.3.7バージョンのAbstractSessionManagerにはMAX_INACTIVE_MINITESプロパティなので、jetty-webapp 9.3.8バージョンのStandardDescriptorProcessorクラスがこのプロパティを参照すると、この例外が報告されます.したがって、jetty-servletのバージョンを9.3.8またはjetty-webappのバージョンを9.3.7に変更するだけで、さらにバージョンを一致させることができます.次のように変更されました.
<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-webapp</artifactId>
			<version>9.3.8.v20160314</version>
		</dependency>

                ……………………
                
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-servlet</artifactId>
			<version>9.3.8.v20160314</version> 
		</dependency>