0

jodd 3.6.6 でビルドしたアプリがあり、jetty9 で実行しようとすると Madvoc を初期化できません。

    1377 [ERROR] j.m.Madvoc.startNewWebApplication:161 - Madvoc startup failure.
jodd.madvoc.MadvocException: Scan classpath error; <--- java.lang.ClassNotFoundException: Class not found: org.eclipse.jetty.client.api.Result
    at jodd.madvoc.config.AutomagicMadvocConfigurator.configure(AutomagicMadvocConfigurator.java:85)
    at jodd.madvoc.config.AutomagicMadvocConfigurator.configure(AutomagicMadvocConfigurator.java:65)
    at jodd.madvoc.WebApplication.configure(WebApplication.java:255)
    at jodd.madvoc.Madvoc.start(Madvoc.java:238)
    at jodd.madvoc.Madvoc.startNewWebApplication(Madvoc.java:157)
    at jodd.madvoc.MadvocServletFilter.init(MadvocServletFilter.java:45)
    at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:138)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:852)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505)
    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:387)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61)
    at org.eclipse.jetty.server.Server.doStart(Server.java:354)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at net.sourceforge.eclipsejetty.starter.jetty9.Jetty9Adapter.start(Jetty9Adapter.java:68)
    at net.sourceforge.eclipsejetty.starter.common.AbstractJettyLauncherMain.launch(AbstractJettyLauncherMain.java:85)
    at net.sourceforge.eclipsejetty.starter.jetty9.Jetty9LauncherMain.main(Jetty9LauncherMain.java:42)
Caused by: jodd.io.findfile.FindFileException: Scan entry error: EntryData{org.eclipse.jetty.client.api.Result'}; <--- java.lang.ClassNotFoundException: Class not found: org.eclipse.jetty.client.api.Result
    at jodd.io.findfile.ClassFinder.scanEntry(ClassFinder.java:391)
    at jodd.io.findfile.ClassFinder.scanJarFile(ClassFinder.java:292)
    at jodd.io.findfile.ClassFinder.scanPath(ClassFinder.java:261)
    at jodd.io.findfile.ClassFinder.scanPaths(ClassFinder.java:226)
    at jodd.madvoc.config.AutomagicMadvocConfigurator.configure(AutomagicMadvocConfigurator.java:83)
    ... 22 more
Caused by: jodd.madvoc.MadvocException: Invalid Madvoc result class: org.eclipse.jetty.client.api.Result; <--- java.lang.ClassNotFoundException: Class not found: org.eclipse.jetty.client.api.Result
    at jodd.madvoc.config.AutomagicMadvocConfigurator.onEntry(AutomagicMadvocConfigurator.java:108)
    at jodd.io.findfile.ClassFinder.scanEntry(ClassFinder.java:389)
    ... 26 more

同じアプリが tomcat で問題なく動作します。何か案が ?

4

1 に答える 1

0

OK、それは単純なはずです: netty クラスのスキャンをスキップするだけです。

説明は次のとおりです。 Madvoc では、必要に応じResultてクラス ( source ) を使用して、結果 ( documentation ) を操作できます。つまり、タイプのあるフィールドがあればResult、Madvoc はそれをこの機能に使用します。

したがって、Netty のクラス名が同じであるように見えるため、エラーが発生します。これを防ぐには (認識が向上するまで)、完全なクラス パスのスキャンをスキップして、スキャナーがクラスのみをスキャンするようにします。これにより、起動時のパフォーマンスも向上します。その方法は次のとおりです。

デフォルトではAutomagicMadvocConfigurator、アクションの構成に (パスをスキャンして) が使用されます。このインスタンスを取得し (WebApplicationたとえば)、構成します (ClassFinderサブクラスであるため)。だから私がすることは:

classFinder.setExcludeAllEntries(true);
classFinder.setIncludedEntries(myapp.getClass().getPackage().getName() + ".*");
classFinder.setIncludedJars("somejar.jar", "myapp*.jar");

これにより、検索されているクラスパスが絞り込まれます。

これについてさらにサポートが必要な場合はお知らせください。その間、私たちは間違いなく変更を加えて、このようなことが二度と起こらないようにします!

于 2015-06-07T20:34:06.197 に答える