Jettyアプリケーションをデプロイするたびに、この問題に遭遇しました。 jar
またはクラスが壊れているようです。
git
とmaven
を使用)~/.m2
と再構築は役に立ちません。jar
が壊れていることでした。試しましたjar tvf $every_jar
、何も見つかりませんでした。これをデバッグするにはどうすればよいですか?本当に不思議に見え、いくつかのファイルが破損しているのではないかと思います。
Stack trace:
2014-10-21 13:29:25.123:WARN:oejw.WebAppContext:Failed startup of context o.e.j.w.WebAppContext{/,file:/XYZ/},/XYZ/webapps/root
javax.servlet.ServletException: jersey-serlvet
at org.Eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.Java:553)
at org.Eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.Java:344)
at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
at org.Eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.Java:791)
at org.Eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.Java:265)
at org.Eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.Java:1242)
at org.Eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.Java:717)
at org.Eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.Java:494)
at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
at org.Eclipse.jetty.deploy.bindings.StandardStarter.processBinding(StandardStarter.Java:39)
at org.Eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.Java:186)
at org.Eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.Java:494)
at org.Eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.Java:141)
at org.Eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.Java:145)
at org.Eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.Java:56)
at org.Eclipse.jetty.util.Scanner.reportAddition(Scanner.Java:615)
at org.Eclipse.jetty.util.Scanner.reportDifferences(Scanner.Java:540)
at org.Eclipse.jetty.util.Scanner.scan(Scanner.Java:403)
at org.Eclipse.jetty.util.Scanner.doStart(Scanner.Java:337)
at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
at org.Eclipse.jetty.deploy.providers.ScanningAppProvider.doStart(ScanningAppProvider.Java:121)
at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
at org.Eclipse.jetty.deploy.DeploymentManager.startAppProvider(DeploymentManager.Java:555)
at org.Eclipse.jetty.deploy.DeploymentManager.doStart(DeploymentManager.Java:230)
at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
at org.Eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.Java:81)
at org.Eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.Java:58)
at org.Eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.Java:96)
at org.Eclipse.jetty.server.Server.doStart(Server.Java:282)
at org.Eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:64)
at org.Eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.Java:1274)
at Java.security.AccessController.doPrivileged(Native Method)
at org.Eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.Java:1197)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:606)
at org.Eclipse.jetty.start.Main.invokeMain(Main.Java:473)
at org.Eclipse.jetty.start.Main.start(Main.Java:615)
at org.Eclipse.jetty.start.Main.main(Main.Java:96)
に続く
Caused by:
Java.lang.ArrayIndexOutOfBoundsException: 6241
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at com.Sun.jersey.spi.scanning.AnnotationScannerListener.onProcess(AnnotationScannerListener.Java:133)
at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner$1.f(FileSchemeScanner.Java:86)
at com.Sun.jersey.core.util.Closing.f(Closing.Java:71)
at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scanDirectory(FileSchemeScanner.Java:83)
at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scanDirectory(FileSchemeScanner.Java:80)
at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scanDirectory(FileSchemeScanner.Java:80)
at com.Sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scan(FileSchemeScanner.Java:71)
at com.Sun.jersey.core.spi.scanning.PackageNamesScanner.scan(PackageNamesScanner.Java:223)
at com.Sun.jersey.core.spi.scanning.PackageNamesScanner.scan(PackageNamesScanner.Java:139)
at com.Sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.Java:80)
at com.Sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.Java:104)
at com.Sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.Java:78)
at com.Sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.Java:89)
at com.Sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.Java:700)
あなたの2つのエラーについて..
javax.servlet.ServletException: jersey-serlvet
これは、WEB-INF/web.xml
にタイプミスがあることを意味します
これは..
Java.lang.ArrayIndexOutOfBoundsException: 6241
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
新しいコンパイル済みのJavaバイトコードでasm.jar
の古いバージョンを使用しているときにも、同様のものが見られます。
asm.jar
(またはorg.objectweb.asm.jar
)が最新であることを確認してください。
クラス自体が悪いという、あまり一般的ではない問題があります。 1つのJDK(IBMなど)でコンパイルされ、別のJava(Sun/Oracleなど))で実行されるクラスで見られることがあります。
これの実際の例は icu4j-2.6.1.jar
およびそのcom/ibm/icu/impl/data/LocaleElements_zh__PINYIN.class
jarエントリ です。
Jetty-maven-pluginの新しいバージョンを使用してください。
詳細情報-> バグ419801-jdk8のasm5へのアップグレード
したがって、pom.xml
このような:
<plugin>
<groupId>org.Eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.M2</version>
</plugin>
GroupIdが「org.Eclipse.jetty」であることに注意してください。
私の場合、ASMライブラリバージョンを使用していて、Java 8ラムダ式をサポートしていないため、ASMライブラリを変更してJava 8をサポートするように変更するか、コード。
私の場合、Java 8ラムダ式を繰り返しに使用していて、forループに置き換えました
レガシーコードを維持しているときに同様の問題に遭遇しました。
サーブレットJerseyServletのServlet.init()が例外をスローしました type Exception report message Servlet.init()がサーブレットJerseyServletが例外をスローしました descriptionサーバーで内部エラーが発生したため、このリクエストを実行できませんでした。 :サーブレットJerseyServletのServlet.init()が例外をスローしました org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:505) org.Apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.Java:103) org.Apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.Java:956) org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java :423) org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1079) org.Apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.Java:625)[ .___ _。] org.Apache.Tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.Java:316) Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142) Java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.Java:617) org.Apache.Tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.Java:61) Java.lang.Thread.run(Thread.Java:745) root cause Java.lang.ArrayIndexOutOfBoundsException noteルートの完全なスタックトレース原因は、Apache Tomcat/7.0.65ログで確認できます。
Web.xmlのパッケージスキャン範囲を縮小して修正しました。たとえば、param-valueタグで以下のpackage_with_too_many_classesを削除すると、問題が修正されました。
<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>com.Sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>package_with_too_many_classes;package_with_approciate_number_of_classes;org.codehaus.jackson.jaxrs</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>