2015-06-07 3 views
0

У меня есть приложение, строить с Джоддом 3.6.6, и когда я пытаюсь запустить его на jetty9 он не может инициализировать Madvoc:Джодда и молы ClassNotFound (org.eclipse.jetty.client.api.Result)

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. Есть идеи ?

+0

Помог ли мой ответ? Вам нужно больше информации? – igr

ответ

0

Хорошо, это должно быть просто: просто пропустите сканирование классов нетти.

Вот объяснение: В 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"); 

Это будет сузить путь к классу, который выполняется поиск.

Дайте мне знать, если вам нужна дополнительная помощь. Между тем, мы обязательно внесем изменения, так что это никогда не повторится!

+0

Я проверю это, как только выходные приедут и вернутся с некоторой обратной связью;) –

+0

FYI: просто игнорируется бросание 'ClassNotFoundException' и запись в него. – igr

Смежные вопросы