2017-08-23 2 views
0

Je viens juste de commencer et Shiro expérimentation a été d'essayer le code de SecurityManager from an INI resource quand je rencontraisLorsque vous essayez de lancer Shiro SecurityManager de ressources INI, java.lang.ClassNotFoundException rencontré: org.apache.commons.logging.LogFactory

java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 

Extended Message:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 
    at org.apache.commons.beanutils.ConvertUtilsBean.<init>(ConvertUtilsBean.java:154) 
    at org.apache.commons.beanutils.BeanUtilsBean.<init>(BeanUtilsBean.java:113) 
    at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:64) 
    at org.apache.commons.beanutils.BeanUtilsBean$1.initialValue(BeanUtilsBean.java:60) 
    at org.apache.commons.beanutils.ContextClassLoaderLocal.get(ContextClassLoaderLocal.java:154) 
    at org.apache.commons.beanutils.BeanUtilsBean.getInstance(BeanUtilsBean.java:76) 
    at org.apache.commons.beanutils.PropertyUtilsBean.getInstance(PropertyUtilsBean.java:107) 
    at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptor(PropertyUtils.java:498) 
    at org.apache.shiro.config.ReflectionBuilder.isTypedProperty(ReflectionBuilder.java:409) 
    at org.apache.shiro.config.ReflectionBuilder.applyProperty(ReflectionBuilder.java:702) 
    at org.apache.shiro.config.ReflectionBuilder.applySingleProperty(ReflectionBuilder.java:364) 
    at org.apache.shiro.config.ReflectionBuilder.applyProperty(ReflectionBuilder.java:325) 
    at org.apache.shiro.config.ReflectionBuilder$AssignmentStatement.doExecute(ReflectionBuilder.java:955) 
    at org.apache.shiro.config.ReflectionBuilder$Statement.execute(ReflectionBuilder.java:887) 
    at org.apache.shiro.config.ReflectionBuilder$BeanConfigurationProcessor.execute(ReflectionBuilder.java:765) 
    at org.apache.shiro.config.ReflectionBuilder.buildObjects(ReflectionBuilder.java:260) 
    at org.apache.shiro.config.IniSecurityManagerFactory.buildInstances(IniSecurityManagerFactory.java:167) 
    at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:130) 
    at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:108) 
    at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:94) 
    at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:46) 
    at org.apache.shiro.config.IniFactorySupport.createInstance(IniFactorySupport.java:123) 
    at org.apache.shiro.util.AbstractFactory.getInstance(AbstractFactory.java:47) 
    at core.Server.testShiro(Server.java:121) 
    at core.Server.main(Server.java:57) 
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 25 more 

Mon code est indiqué par core.Server.testShiro(Server.java:121):

org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();

Je pense, il y a un problème avec le fichier shiro.ini I spécifié dans la ligne de code précédente Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); et basé sur le message d'erreur, semble que la beanutils est la bibliothèque qui a besoin de la classe org.apache.commons.logging.LogFactory

Ma question n'est pas comment corriger le shiro.ini, mais plutôt comment résoudre le ClassNotFoundException.

Notez que j'utilise log4j2 et ont déjà inclus les pots de log4j2, ainsi que les adaptateurs relais de SLF4J (je crois comprendre que Shiro besoin ces) pots dans ma bibliothèque:

  • log4j-api-2.8 .2.jar
  • log4j-core-2.8.2.jar
  • log4j-slf4j-impl-2.8.2.jar
  • slf4j-api-1.7.25.jar

que ainsi que des pots Hibernate

J'ai fait quelques recherches et j'ai vu la réponse de Les Hazlewood à la question java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory du site de l'utilisateur de Shiro pour regarder explicitly excluding JCL. Les trois options indiquées du site dirigé ne s'appliquent pas vraiment car je n'utilise pas de projet Maven-is, juste un projet java autonome dans Netbeans. Cependant, j'ai essayé d'inclure commons-logging-1.2.jar et jcl-over-slf4j-1.7.25.jar dans mon dossier de lib (que j'ai recueilli est semblable à l'instruction de «fournir la portée» du site) mais cela ne résout pas l'exception.

J'ai également essayé d'inclure log4j-jcl-2.8.2.jar dans mon dossier lib, mais la même exception ne disparaît toujours pas.

Toute aide et conseil seront très appréciés. Merci d'avance! À votre santé.

Répondre

0

Je viens d'avoir la même erreur lors de l'utilisation de shiro-web. Puisque vous utilisez déjà slf4j, ajoutez simplement la dépendance d'exécution à jcl-over-slf4j. Je viens de le faire et cela a résolu l'exception. Si vous obtenez toujours l'erreur, alors vous ne faites pas quelque chose correctement - par ex. placer les jars pour corriger l'emplacement, ...

N'incluez pas la journalisation des communs avec le pont jcl. Soit utiliser le pont jcl pour slf4j, soit utiliser le journal de connexion, les deux n'ont pas beaucoup de sens.