java - Docker Kafka 生产者 java.lang.ClassNotFoundException

标签 java docker apache-kafka dockerfile

我正在尝试在 docker 上运行我的 kafka 项目。如果我在本地运行这个项目,它可以正常工作,但如果我在 docker 上运行,我会收到此错误消息

   Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/kafka/clients/producer/Producer
        at com.kafka.App.main(App.java:14)
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.clients.producer.Producer
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

我不确定,但看起来无法从 pom.xml 加载依赖项。

这是我的 Dockerfile

FROM maven:3.5-jdk-8 as maven
WORKDIR /app
COPY ./pom.xml ./pom.xml
RUN mvn dependency:go-offline -B
COPY ./src ./src
RUN mvn package && cp target/kafka-producer-*.jar app.jar
RUN apk add --no-cache bash
WORKDIR /app
COPY --from=maven /app/app.jar ./app.jar
CMD ["java", "-jar", "/app/app.jar"]

最后一件事 App:14 从 SimpleProducer 类创建新实例,错误行是

import com.kafka.Interfaces.IKafkaConstants;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;      ***HERE***
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.LongSerializer;
import org.apache.kafka.common.serialization.StringSerializer;
import java.util.Properties;

public class SimpleProducer {

最佳答案

根据错误,您的 JAR 似乎不包含您声明的依赖项。

您应该在“本地”执行java -jar时遇到类似的错误,并且您可以使用shade插件来解决该错误,例如制作一个uber jar。

或者,我建议使用 jib-maven-plugin构建容器,我相信这确实将所有声明依赖项放入容器镜像中,并且不需要 Dockerfile。 (我没有任何隶属关系)

关于java - Docker Kafka 生产者 java.lang.ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56638276/

相关文章:

java - AWS ECS : Task Being Mapped to Wrong Target Group

amazon-web-services - 使用Docker在AWS EC2上运行Elasticsearch

apache-kafka - 不同计算机上的 Kafka 生产者和消费者无法通信

将长数组转换为字节数组的Java native 方法

java - Spring MVC "duplicates"部分 URL

java - 如何让TableView不显示缺失的行?

java - 负数按位运算符

python - 如果在 python multiprocessing.cpu_count() 中返回 64,我是否受益于 gcloud Compute Engine 的 96 个 vCPU?

Python Kafka 客户端 - 没有错误但无法正常工作

java - 如何使用 Java Spark 结构化流从 Kafka 主题正确消费