2016-08-07 40 views
12

dodałem Java zdecyduje -Dnet.spy.log.LoggerImpl = net.spy.memcached.compat.log.SLF4JLogger do powołanego do spymemcached użyj slf4j jako logger. Ale jestem coraz następujące ostrzeżenie w dziennikach tomcat6 i jestem zaskoczony nad błędemjava.lang.ClassNotFoundException: net.spy.memcached.compat.log.SLF4JLogger

net.spy.memcached.compat.log.SLF4JLogger not found while initializing net.spy.compat.log.LoggerFactory java.lang.ClassNotFoundException: net.spy.memcached.compat.log.SLF4JLogger 

Jak to może być możliwe, że SLF4JLogger klasa nie została znaleziona. To, że inicjowało LoggerFactory, oznacza, że ​​pakiet net.spy był dostępny i ogólnie rzecz biorąc, był dostępny pojemnik memcache szpiegującego. Jak więc może nie znaleźć drugiej klasy.

log4j: setFile ended log4j: Adding appender named [SecurityAuditAppender] to category [SecurityAuditLogger]. Warning: net.spy.memcached.compat.log.SLF4JLogger not found while initializing net.spy.compat.log.LoggerFactory java.lang.ClassNotFoundException: net.spy.memcached.compat.log.SLF4JLogger 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680) 
     at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526) 
     at java.lang.Class.forName0(Native Method) 
     at java.lang.Class.forName(Class.java:191) 
     at net.spy.memcached.compat.log.LoggerFactory.getConstructor(LoggerFactory.java:131) 
     at net.spy.memcached.compat.log.LoggerFactory.getNewInstance(LoggerFactory.java:115) 
     at net.spy.memcached.compat.log.LoggerFactory.internalGetLogger(LoggerFactory.java:98) 
     at net.spy.memcached.compat.log.LoggerFactory.getLogger(LoggerFactory.java:87) 
     at net.spy.memcached.compat.log.LoggerFactory.getLogger(LoggerFactory.java:73) 
     at net.spy.memcached.compat.SpyThread.getLogger(SpyThread.java:60) 
     at net.spy.memcached.MemcachedConnection.createConnections(MemcachedConnection.java:152) 
     at net.spy.memcached.MemcachedConnection.<init>(MemcachedConnection.java:128) 
     at net.spy.memcached.DefaultConnectionFactory.createConnection(DefaultConnectionFactory.java:176) 
     at net.spy.memcached.MemcachedClient.<init>(MemcachedClient.java:193) 
     at net.spy.memcached.spring.MemcachedClientFactoryBean.getObject(MemcachedClientFactoryBean.java:72) 
     at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) 
     at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1442) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) 
     at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
     at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) 
     at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) 
     at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 
     at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4210) 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4709) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:583) 
     at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675) 
     at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502) 
     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142) 
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065) 
     at org.apache.catalina.core.StandardHost.start(StandardHost.java:822) 
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057) 
     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463) 
     at org.apache.catalina.core.StandardService.start(StandardService.java:525) 
     at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) 
     at org.apache.catalina.startup.Catalina.start(Catalina.java:595) 
     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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) 
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 
+0

Jakie jest twoje pytanie? – Phoenix

+0

@Phoenix przepraszam przypadkowo przesłany przedwcześnie, zredagowałem. – user782220

Odpowiedz

4

Jeśli WebAppClassLoader rzuca ClassNotFoundException, to klasa nie jest w aplikacji internetowej. Uzyskaj latest version słoiczka klienta spymemcached (2.12.1 w chwili pisania tego wpisu) i umieść go w katalogu swojej aplikacji internetowej w katalogu WEB-INF/lib. Usuń wszystkie inne słoiki z tego katalogu, aby uniknąć konfliktów związanych z ładowaniem klas.

net.spy.memcached.compat.log.SLF4JLogger został wprowadzony dopiero w wersji 2.9.0, więc jeśli używasz starszej wersji net.spy:spymemcached, które mogłyby wyjaśnić, dlaczego to może znaleźć LoggerFactory ale nie SLF4JLogger.

+0

Odkryłem więc, że oprócz wersji 2.12.1 dołączono także wersję 2.8.12 do słoika. Zaktualizowałem plik pom.xml dla wszystkich podprojektów, aby używać wersji 2.12.1 i zweryfikowałem, używając 'jar tf', że nowy jar zawiera tylko spymemcached wersję 2.12.1. Nadal jednak widzę ten problem. Pomysły? – user782220

+0

Czy zweryfikowałeś istnienie pliku klasy 'net.spy.memcached.compat.log.SLF4JLogger' w spymemcached jar oraz że spymemcached plik jar znajduje się w' WEB-INF/lib' w pliku * war * i/lub twój rozbity plik wojenny? – heenenee

+0

Potrójne sprawdzenie, czy to prawda. Zaczynam myśleć, że jest coś subtelnego na temat tego, jak definiuje się ścieżkę klasową na początku inicjalizacji Springa lub czegoś podobnego. Ale naprawdę nie mam pojęcia. – user782220

1

można sprawdzić drzewa zależności z Dependency Plugin

mvn dependency:tree -Dverbose -Dincludes=spymemcached 

jeśli widzisz żadnej innej wersji obok 2.12.1, sprawdź to top odniesienia i dodać tag wykluczeniu na to Maven elementem zależność jak:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>3.0.3.RELEASE</version> 
    <exclusions> 
     <exclusion> 
      <groupId>net.spy</groupId> 
      <artifactId>spymemcached</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency