引起者:java.lang.NoClassDefFoundError:org/apache/log4j/Logger

 Mr_小迪2502897623 发布于 2023-02-06 17:54

我有一个有趣的问题,在运行时没有找到org.apache.log4j.Logger类.我正在尝试获得授权,这就是它失败的地方:

OAuthAuthorizer oauthAuthorizer = new OAuthAuthorizer(OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, SAML_PROVIDER_ID, userId);

我正在使用JDeveloper 11.1.1.6.这就是我所知道的:

    我查看了我的UI.war/WEB-INF/lib目录,我看到了log4j-1.2.17.jar.

    抱怨它的类是org.opensaml.xml.XMLConfigurator

    Caused by: java.lang.NoClassDefFoundError: org/apache/log4j/Logger
        at org.opensaml.xml.XMLConfigurator.(XMLConfigurator.java:60)
        at org.opensaml.DefaultBootstrap.initializeXMLTooling(DefaultBootstrap.java:195)
        at org.opensaml.DefaultBootstrap.bootstrap(DefaultBootstrap.java:91)
        at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.getSAMLBuilder(SAML2AssertionGenerator.java:156)
        at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.createSubject(SAML2AssertionGenerator.java:187)
        at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.buildAssertion(SAML2AssertionGenerator.java:114)
        at com.intuit.ipp.aggcat.util.SAML2AssertionGenerator.generateSignedAssertion(SAML2AssertionGenerator.java:83)
        at com.intuit.ipp.aggcat.util.SamlUtil.createSignedSAMLPayload(SamlUtil.java:156)
        at com.intuit.ipp.aggcat.util.OAuthUtil.getOAuthTokens(OAuthUtil.java:60)
        at com.intuit.ipp.aggcat.core.OAuthAuthorizer.(OAuthAuthorizer.java:85)
        at com.incomemax.view.intuit.WebUtil.getAggCatService(WebUtil.java:91)
    
    Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:305)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:246)
        ... 64 more
    

    我解压缩了XMLConfigurator,奇怪的是它没有导入org.apache.log4j.Logger它使用org.slf4j.Logger,它也在我的jars目录中(slf4j-api-1.7.5.jar).同样有趣的是,第60行(参见堆栈跟踪)是我的反编译中的空行.

    当然,如果我在设计时添加Logger.xxxxx,它会发现它很好.

    我直接从示例java代码中使用代码/ jar,但导入到我现有的应用程序中.

我一直在网上寻找答案,我相信我已经检查了所有我能想到的领域.我也引用了这个非常好的页面:http://myarch.com/classnotfound/

鉴于授权是使用Intuit Developer API的第1步,我有点卡住了.

从@jhadesdev建议中添加输出:

所有版本的log4j Logger:

邮编:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/log4j-1.2 .17.jar!/org/apache/log4j/Logger.class

从OAuthAuthorizer类的类加载器可以看到所有版本的log4j:

邮编:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/log4j-1.2 .17.jar!/org/apache/log4j/Logger.class

所有版本的XMLConfigurator:

罐子:文件:/ C:/Oracle/Middleware11116/modules/com.bea.core.bea.opensaml2_1.0.0.0_6-1-0-0.jar /org/opensaml/xml/XMLConfigurator.class

邮编:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/ipp-java -aggcat-V1的devkit-1.0.2.jar!/org/opensaml/xml/XMLConfigurator.class

邮编:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/xmltooling-1.3 .1.jar!/org/opensaml/xml/XMLConfigurator.class

从OAuthAuthorizer类的类加载器可以看到所有版本的XMLConfigurator:

罐子:文件:/ C:/Oracle/Middleware11116/modules/com.bea.core.bea.opensaml2_1.0.0.0_6-1-0-0.jar /org/opensaml/xml/XMLConfigurator.class

邮编:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/ipp-java -aggcat-V1的devkit-1.0.2.jar!/org/opensaml/xml/XMLConfigurator.class

邮编:C:/Users/Chris/AppData/Roaming/JDeveloper/system11.1.1.6.38.61.92/DefaultDomain/servers/DefaultServer/tmp/_WL_user/j2ee-app/lt5l71/war/WEB-INF/lib/xmltooling-1.3 .1.jar!/org/opensaml/xml/XMLConfigurator.class

我还在努力解释结果.

3 个回答
  • 检查部署程序集,

    我有同样的错误,当我使用"maven clean install"方式生成war文件并部署manualy时,它工作正常,但是当我使用运行时环境(eclipse)问题来了.

    对我来说(对于eclipse IDE)的解决方案是:"proyect properties" - >"Deployment Assembly" - >"Add" - >"你需要的jar",在我的例子中是java"build path entries".也许可以帮助一个痘痘!

    2023-02-06 17:56 回答
  • 在运行时,您的应用程序无法找到jar.

    来自这个答案由贾里德:

    在这种情况下,重要的是要保持两个不同的例外:

      java.lang.ClassNotFoundException这是一个Exception,它表示在类路径中找不到该类.这表明我们正在尝试加载类定义,并且类在路径上不存在.

      java.lang.NoClassDefFoundError这是Error,它表明JVM在其内部类定义数据结构中查找了类的定义但未找到它.这与说它无法从类路径加载不同.通常这表明我们之前尝试从类路径加载一个类,但由于某种原因它失败了 - 现在我们再次尝试,但我们甚至都不会尝试加载它,因为我们之前没有加载它.较早的失败可能是ClassNotFoundException或ExceptionInInitializerError(表示静态初始化块中的失败)或任何其他问题.关键是,NoClassDefFoundError不一定是类路径问题.

    相似之处和不同之处

    2023-02-06 17:56 回答
  • 您可以在pom文件中使用以下maven依赖项.否则,您可以从net下载以下两个jar并将其添加到构建路径中.

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.4</version>
    </dependency>
    
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.4</version>
    </dependency>
    

    这是从我的工作项目中复制的.首先确保它在您的项目中正常工作.然后,您可以更改版本以使用任何其他(版本)兼容的jar.

    对于AggCat,您可以引用示例Java应用程序的POM文件.

    https://github.com/IntuitDeveloperRelations/IPP_Sample_Code/blob/master/CustomerAccountData/Java/AggCatSampleApplication/pom.xml

    谢谢

    2023-02-06 17:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有