Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌入式kafka scalatest ClassNotFoundException:scala.collection.GenTraversableOnce_Java_Scala_Gradle_Apache Kafka_Scalatest - Fatal编程技术网

Java 嵌入式kafka scalatest ClassNotFoundException:scala.collection.GenTraversableOnce

Java 嵌入式kafka scalatest ClassNotFoundException:scala.collection.GenTraversableOnce,java,scala,gradle,apache-kafka,scalatest,Java,Scala,Gradle,Apache Kafka,Scalatest,对于Scala来说,我刚刚开始实施ScalaTest的第一步,根据该自述文件顶部的第二个示例: import net.manub.embeddedkafka.embeddedkafka 导入org.scalatest.matchers.should.matchers 导入org.scalatest.wordspec.AnyWordSpecLike 类minimatest使用匹配器扩展AnyWordSpecLike{ “嵌入卡夫卡的跑步”应该{ “工作”于{ 嵌入的kafka.start() 1+

对于Scala来说,我刚刚开始实施ScalaTest的第一步,根据该自述文件顶部的第二个示例:

import net.manub.embeddedkafka.embeddedkafka
导入org.scalatest.matchers.should.matchers
导入org.scalatest.wordspec.AnyWordSpecLike
类minimatest使用匹配器扩展AnyWordSpecLike{
“嵌入卡夫卡的跑步”应该{
“工作”于{
嵌入的kafka.start()
1+1应该是2
//…代码在这里
嵌入kafka.stop()
}
}
}
运行此测试时,故障级别低于我熟悉的级别:

minimatest:
与嵌入式卡夫卡一起运行
***运行中止***
java.lang.NoClassDefFoundError:scala/collection/GenTraversableOnce
在com.myorganization.api.minimatest.$anonfun$new$2(minimatest.scala:13)
在scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
在org.scalatest.OutcomeOf.OutcomeOf(OutcomeOf.scala:85)
位于org.scalatest.OutcomeOf.OutcomeOf$(OutcomeOf.scala:83)
在org.scalatest.OutcomeOf$.OutcomeOf(OutcomeOf.scala:104)
在org.scalatest.Transformer.apply上(Transformer.scala:22)
在org.scalatest.Transformer.apply上(Transformer.scala:20)
位于org.scalatest.wordspec.AnyWordSpecLike$$anon$3.apply(AnyWordSpecLike.scala:1076)
位于org.scalatest.TestSuite.withFixture(TestSuite.scala:196)
位于org.scalatest.TestSuite.withFixture$(TestSuite.scala:195)
...
原因:java.lang.ClassNotFoundException:scala.collection.GenTraversableOnce
位于java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
位于java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
位于java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
在com.myorganization.api.minimatest.$anonfun$new$2(minimatest.scala:13)
在scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
在org.scalatest.OutcomeOf.OutcomeOf(OutcomeOf.scala:85)
位于org.scalatest.OutcomeOf.OutcomeOf$(OutcomeOf.scala:83)
在org.scalatest.OutcomeOf$.OutcomeOf(OutcomeOf.scala:104)
在org.scalatest.Transformer.apply上(Transformer.scala:22)
在org.scalatest.Transformer.apply上(Transformer.scala:20)
...
我怀疑依赖项版本不匹配,但无法发现它。以下是我的相关build.gradle内容:

plugins {
    id 'java'
    id 'scala'
}

task spec(dependsOn: ['testClasses'], type: JavaExec) {
    main = 'org.scalatest.tools.Runner'
    args = ['-R', 'build/classes/scala/test', '-o']
    classpath = sourceSets.test.runtimeClasspath
}

dependencies {
    compile 'io.confluent:kafka-streams-avro-serde:5.4.0'
    compile 'io.github.embeddedkafka:embedded-kafka-streams_2.12:2.4.0'
    compile 'io.github.embeddedkafka:embedded-kafka_2.12:2.4.0'
    compile 'org.apache.avro:avro:1.9.1'
    compile 'org.apache.kafka:kafka-clients:2.4.0'
    compile 'org.apache.kafka:kafka-streams:2.4.0'
    compile 'org.apache.kafka:kafka_2.13:2.4.0'
    compile 'org.scala-lang:scala-reflect:2.12.6'
    testCompile 'io.github.embeddedkafka:embedded-kafka-schema-registry_2.12:5.4.0' // match schema registry version
    testCompile 'io.github.embeddedkafka:embedded-kafka-streams_2.13:2.4.0' // match kafka streams version
    testCompile 'io.github.embeddedkafka:embedded-kafka_2.13:2.4.0' // match kafka version
    testCompile 'org.scala-lang:scala-library:2.13.2'
    testCompile 'org.scalatest:scalatest_2.13:3.1.2'
    testImplementation 'junit:junit:4.11'
    testRuntime 'org.pegdown:pegdown:1.4.2'
}


Gradle对于Scala的可传递依赖项确实有点滑稽,因为它不会自动计算一组连贯的版本

“缺少”类scala/collection/GenTraversableOnce是scala库的一部分,在2.12.x中提供

因此,您应该能够通过以下方式解决此问题:

  • a。在运行时类路径上显式声明scala库版本:
    实现组:'org.scala lang',名称:'scala library',版本:'2.12.6'
  • b。检查库的2.13版本的所有其他依赖项(如@ShankarShastri建议的)。似乎嵌入式卡夫卡有一个2.12兼容版本:
完成此操作后,假设您的IDE设置为与
build.gradle
文件同步,您应该能够查看gradle计算的依赖项(声明的和可传递的)。如果仍然存在问题,请手动检查这些问题,并查看
org.scala lang:scala库是否丢失或声明了两次。如果有多个声明,可以在mvncentral.com中查看每个库的依赖项


注意:步骤(a)的原因是您的“编译”依赖项中有scala人工制品,因此我假设您的所有代码(不仅仅是测试代码)都在使用scala。

scala反映了2.13.2而不是2.12.6?另一件事是在您的测试用例中使用Scalatest的Before和Afterall谢谢!大魔术师。。。org.apache.kafka:kafka_2.13:2.4.0中的
2.13
代表Scala 2.13。因此,所有这些都需要更新到
2.12