Докер Кафка Производитель java.lang.ClassNotFoundException - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь запустить свой проект kafka в докере.Если я запускаю этот проект на своем локальном компьютере, он работает правильно, но если я запускаю на докере, я получаю это сообщение об ошибке

   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"]

И последнее приложение: 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 {

1 Ответ

1 голос
/ 18 июня 2019

Судя по ошибке, ваш JAR-файл не содержит ваших заявленных зависимостей.

Вы должны получить похожую ошибку, выполнив java -jar "локально", и вы можете обойти эту ошибку, используя плагин Shade, например, чтобы сделать Uber JAR.

Или я бы предложил использовать jib-maven-plugin для построения контейнера, который, как я полагаю, помещает все объявленные зависимости в образ контейнера, и вам не нужен файл Docker.(У меня нет принадлежности)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...