java.lang.NoClassDefFoundError: org/apache/enregistrement/log4j/Enregistreur
Je veux effectuer les tests unitaires dans Elasticsearch pour que je suis en utilisant Java-test-framework
Je suis à l'aide de Elasticsearch-1.6.0
et en se référant à ces lien pour obtenir de l'aide
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
voici le code
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()
}
Je reçois cette exception
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
obtenir une exception sur cette ligne
val client=new CampaignESTest
dans la classe CampaignTestSearch
voici les dépendances dans build.sbt
fichier
"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",
je soupçonne que la cause de l'exception peut-être en raison de certaines versions des dépendances quelqu'un peut s'il vous plaît aider avec la bibliothèque correcte de la dépendance de la version pour la rendre au travail ou est-il autre chose qui me manque
Modifier
suppression de "test" à partir de "org.apache.la journalisation.log4j" % "log4j-core" % "2.8.2"
Mise à jour 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",
- pourquoi vous avez ajouté log4j bocal comme
test
dépendance ? - je vois dans votre configuration, vous avez à la fois log4j2 et slf4j. quelle est votre intention en ce qui concerne qui? 1. direct tous slf4j appels à log4j2 de mise en œuvre / 2. direct tous log4j2 appels à slf4j (et l'utilisation de logback ou quoi que ce soit) . Cela peut influer sur la réponse.
- je suis à l'aide de "org.slf4j" % "slf4j-api" % "1.6.4", pour l'enregistrement de mon application et j'ai ajouté "org.apache.la journalisation.log4j" % "log4j-core" % "2.8.2" seulement pour la suppression de cette exception, mais il ne résout pas le problème
Vous devez vous connecter pour publier un commentaire.
à résoudre votre problème, ajoutez ce qui suit dépendance manquante:
de côté, ne sont pas directement liées à la question, ajoutez ce qui suit à la dépendance, de sorte que vos propres appels à slf4j api obtenir dirigé à log4j2 mise en œuvre aussi:
de s'assurer qu'aucun autre journal de la mise en œuvre est présente sur le chemin de classe.
remarque: le "plus" de la suggestion que j'ai faite est basée à qui vous souhaitez rediriger tous vos appels du journal de log4j, peu importe si vous appelez slf4j api ou directement log4j. Si non, veuillez indiquer à quel journal implementatjon vous le souhaitez, depuis l'OP répertoriés depenedencies est aussi quelque chose lui manque.
Caused By: Cause: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
erreur indique que, JVM n'est pas capable de trouvé org.apache.log4j.Enregistreur de classe dans votre projet ou votre CLASSPATH de l'application. peut-être la raison de l'erreur est manquant log4j.jar fichier dans votre projet ou bien le chemin de classe. si vous devez utiliser au-dessous de la dépendance: