Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
Spring 运行KafkameBedded进行单元测试时发生java.lang.NoClassDefFoundError_Spring_Spring Boot_Spring Kafka - Fatal编程技术网

Spring 运行KafkameBedded进行单元测试时发生java.lang.NoClassDefFoundError

Spring 运行KafkameBedded进行单元测试时发生java.lang.NoClassDefFoundError,spring,spring-boot,spring-kafka,Spring,Spring Boot,Spring Kafka,我有一个运行SpringBoot2.0.2的SpringKafka项目。在单元测试中,我试图启动一个Kafkamebedded服务器。我得到这个错误 java.lang.NoClassDefFoundError: org/apache/kafka/common/security/auth/SecurityProtocol at kafka.utils.TestUtils$.createBrokerConfig(TestUtils.scala:222) at kafka.utils.TestUt

我有一个运行SpringBoot2.0.2的SpringKafka项目。在单元测试中,我试图启动一个Kafkamebedded服务器。我得到这个错误

java.lang.NoClassDefFoundError: org/apache/kafka/common/security/auth/SecurityProtocol

at kafka.utils.TestUtils$.createBrokerConfig(TestUtils.scala:222)
at kafka.utils.TestUtils.createBrokerConfig(TestUtils.scala)
at org.springframework.kafka.test.rule.KafkaEmbedded.createBrokerProperties(KafkaEmbedded.java:278)
at org.springframework.kafka.test.rule.KafkaEmbedded.before(KafkaEmbedded.java:224)
at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.common.security.auth.SecurityProtocol
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 13 more
我知道这是因为依赖项不匹配。但是我添加了最新版本的SpringKafka测试和kafka客户端。我知道这个类“SecurityProtocol”在Kafka客户端jar中,但是添加依赖项(旧版本和新版本)仍然不能解决问题

以下是pom文件中的依赖项

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka-test</artifactId>
        <version>2.1.6.RELEASE</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>1.0.0</version>
        <scope>test</scope>
    </dependency>
类路径上有错误的kafka(scala)jar

java.lang.NoClassDefFoundError:org/apache/kafka/common/security/auth/SecurityProtocol

在kafka客户端1.0.0中,
SecurityProtocol
已从
org.apache.kafka.common.protocol
移动到
org.apache.kafka.common.security.auth

所以看起来你(不知何故)在CP上得到了旧的卡夫卡2.11罐<代码>春季卡夫卡测试
应提供正确的版本。可能pom中有未显示的覆盖?

类路径上有错误的kafka(scala)jar

java.lang.NoClassDefFoundError:org/apache/kafka/common/security/auth/SecurityProtocol

在kafka客户端1.0.0中,
SecurityProtocol
已从
org.apache.kafka.common.protocol
移动到
org.apache.kafka.common.security.auth


所以看起来你(不知何故)在CP上得到了旧的卡夫卡2.11罐<代码>春季卡夫卡测试
应提供正确的版本。可能您的pom中有未显示的覆盖?

解决方案是避免在Spring Boot项目的pom.xml文件中为所有与Kafka相关的依赖项指定版本。像这样-

        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka-test</artifactId>
        <scope>test</scope>
    </dependency>

org.springframework.boot
弹簧靴起动器
org.springframework.kafka
春天卡夫卡
org.springframework.boot
弹簧起动试验
测试
org.springframework.kafka
弹簧卡夫卡试验
测试

解决方案是避免在Spring Boot项目的pom.xml文件中为所有与Kafka相关的依赖项指定版本。像这样-

        <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka-test</artifactId>
        <scope>test</scope>
    </dependency>

org.springframework.boot
弹簧靴起动器
org.springframework.kafka
春天卡夫卡
org.springframework.boot
弹簧起动试验
测试
org.springframework.kafka
弹簧卡夫卡试验
测试

如果您使用的是kafka客户端(不是spring kafka),请确保pom中使用的kafka客户端版本与spring kafka测试依赖项中使用的版本相同。 在spring kafka test maven repo[,它列出了所有依赖项,包括它使用的kafka客户端。 因此,要么更新kafka客户端版本,要么更新spring kafka测试版本
确保客户端相同。

如果您使用的是kafka客户端(不是spring kafka),请确保pom中使用的kafka客户端版本与spring kafka测试依赖项中使用的版本相同。 在spring kafka test maven repo[,它列出了所有依赖项,包括它使用的kafka客户端。 因此,要么更新kafka客户端版本,要么更新spring kafka测试版本
确保客户端相同。

我建议您不要使用显式的
kafka客户端
依赖项,而只依赖于Spring Boot拉取的版本。我建议您不要使用显式的
kafka客户端
依赖项,而只依赖于Spring Boot拉取的版本。这很有帮助。我不确定问题是如何开始的,我的第一种方法是显式地将kafka客户端添加到pm文件中。正如@artem bilan所建议的,我们不应该添加kafka客户端。清除类路径并删除除spring boot(2.0.2)之外的所有依赖项的显式版本的解决方案。这很有帮助。我不确定问题是如何开始的,我的第一种方法是显式地将kafka客户端添加到pm文件中。正如@artem bilan所建议的,我们不应该添加kafka客户端。清除类路径并删除除spring boot(2.0.2)之外的所有依赖项的显式版本的解决方案。