当前位置: 首页 > 面试题库 >

java.lang.NoClassDefFoundError:org / apache / logging / log4j / Logger

陈正业
2023-03-14
问题内容

我想在我正在使用的Elasticsearch中执行单元测试,Java-test-framework
我正在使用Elasticsearch-1.6.0 并参考以下链接以寻求帮助
https://www.elastic.co/guide/en/elasticsearch/reference/1.6/using-
elasticsearch-test-classes .html

https://github.com/elastic/elasticsearch/blob/master/core/src/test/java/org/elasticsearch/action/search/SearchRequestBuilderTests.java

这是代码

class CampaignESTest extends ESTestCase {

  def getCLient():MockTransportClient={
     val settings = Settings.builder()
                .put(Environment.PATH_HOME_SETTING.getKey(), Files.createTempDir().toString())
                .build();
     val client = new MockTransportClient(settings);  
     client
  }
 }

class CampaignTestSearch extends PlaySpec{
  val client=new CampaignESTest

val response = client.prepareSearch("dbtest")
      .setTypes(CAMPAIGN_COLLECTION_NAME)
      .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
      .addFields("uuid","campaignName","artworkID","activationDate","_source")
      .setQuery(query)
      .execute()
      .actionGet()
  }

我收到这个例外

  DeferredAbortedSuite:
[info] Exception encountered when attempting to run a suite with class name: org.scalatest.DeferredAbortedSuite *** ABORTED ***
[info]   java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger
[info]   at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101)
[info]   at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:92)
[info]   at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:78)
[info]   at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:138)
[info]   at testcontrollers.campaign.CampaignTestSerach.<init>(CampaignTestSerach.scala:40)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[info]   at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[info]   at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
[info]   at java.lang.Class.newInstance(Class.java:442)
[info]   ...
[info]   Cause: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
[info]   at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[info]   at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[info]   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
[info]   at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[info]   at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101)
[info]   at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:92)
[info]   at org.elasticsearch.bootstrap.BootstrapForTesting.<clinit>(BootstrapForTesting.java:78)
[info]   at org.elasticsearch.test.ESTestCase.<clinit>(ESTestCase.java:138)
[info]   at testcontrollers.campaign.CampaignTestSerach.<init>(CampaignTestSerach.scala:40)
[info]   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[info]   ...
[error] Uncaught exception when running testcontrollers.campaign.CampaignTestSerach: java.lang.NoClassDefFoundError: org/apache/logging/log4j/Logger

在这条线上得到一个例外

val client=new CampaignESTest

在班上 CampaignTestSearch

这是build.sbt文件中的依赖项

   "org.slf4j" % "slf4j-api" % "1.6.4",
                "org.elasticsearch" % "elasticsearch" % "1.6.0",
                "org.elasticsearch.test" % "framework" % "5.0.0" % "test",
                "org.apache.lucene" % "lucene-test-framework" % "4.10.4" % "test",
                "com.carrotsearch.randomizedtesting" % "randomizedtesting-runner" % "1.6.0" % "test",
                "org.apache.lucene" % "lucene-codecs" % "4.10.4" % "test",
                "org.apache.logging.log4j" % "log4j-core" % "2.8.2" ,
"org.apache.lucene" % "lucene-expressions" % "4.10.4",

我怀疑引起异常的原因可能是由于某些版本的依赖关系,任何人都可以帮助提供正确的库依赖关系版本以使其正常工作,或者我还缺少其他东西

编辑 从“ org.apache.logging.log4j”中删除的“测试”%“ log4j-core”%“ 2.8.2”
更新build.sbt

"org.slf4j" % "slf4j-api" % "1.6.4",
                "org.elasticsearch" % "elasticsearch" % "1.6.0",
                "org.elasticsearch.test" % "framework" % "5.0.0" % "test",
                "org.apache.lucene" % "lucene-test-framework" % "4.10.4" % "test",
                "com.carrotsearch.randomizedtesting" % "randomizedtesting-runner" % "1.6.0" % "test",
                "org.apache.lucene" % "lucene-codecs" % "4.10.4" % "test",
                "org.apache.logging.log4j" % "log4j-core" % "2.8.2",
                "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.8.2" ,
                "org.apache.lucene" % "lucene-expressions" % "4.10.4",

问题答案:

要解决您的问题,请添加以下缺少的依赖项:

  • org.apache.logging.log4j:log4j-api:2.8.2

另外,与问题没有直接关系,请添加以下依赖项,以便您自己对slf4j api的调用也将定向到log4j2实现:

  • org.apache.logging.log4j:log4j-slf4j-impl:2.8.2

确保在类路径上没有其他日志实现。

注意:我提出的“额外”建议是基于您想将所有日志调用重定向到log4j的,无论您是调用slf4j
api还是直接调用log4j。如果不是,请说明您要使用哪种日志实现,因为那样的话,OP列出的依赖关系也会丢失。



 类似资料:
  • 问题内容: 我总是遇到以下错误。有人可以帮我吗? 当我编译以下代码时。我已经在网上搜索了,但没有找到解决方案。添加saveToCassandra时出现错误。 我的pom是以下内容。 问题答案: org.apache.spark.Logging在Spark版本1.5.2或更低版本中可用。它不在2.0.0中。请更改版本如下

  • 问题内容: 我遇到了一个有趣的问题,其中在运行时找不到org.apache.log4j.Logger类。我正在尝试获得授权,这就是失败的地方: 我正在使用JDeveloper 11.1.1.6。这是我所知道的: 我已经查看了我的UI.war / WEB-INF / lib目录,在那里看到了log4j-1.2.17.jar。 抱怨它的类是org.opensaml.xml.XMLConfigurato

  • 我想在Elasticsearch中执行单元测试,因为我正在使用

  • https://logging.apache.org/log4j/2.x/maven-artifacts.html 我将它粘贴到我的文件中,并编写了运行代码的示例代码。 除此之外,我还添加了manifest以便从控制台运行代码。 最重要的是,有一点需要指出,虽然它不能与java-jar<.jar>一起工作,但出于某种原因,它仍然可以在Intellij IDEA中工作。有人能给我解释一下为什么吗?

  • 问题内容: 我正在开发GWT应用程序。它使用RPC从内部系统收集信息。它是通过使用一个库jar来实现的,我们称其为alpha.jar。我们在许多应用程序中都使用了这个jar,因此它可以正常工作,并且在日食之外使用ANT构建。 alpha.jar中的某些类引用了LOG4J2,还引用了许多其他外部jar,因此, 当我们运行应用程序时,我们将类路径传递给所有这些类,并且一切正常 。请注意,这不是一个简单

  • 我有一个NetBeans项目,我想在其中设计jasper报表,当我通过填充报表时,我发现了一条错误消息。 例外情况是: 线程“awt-eventqueue-0”java.lang.noClassDefounderror:org/apache/commons/logging/logFactory在net.sf.jasperReports.engine.util.jrloader.(jrloader.