【问题标题】:java.lang.NoClassDefFoundError on DockerDocker 上的 java.lang.NoClassDefFoundError
【发布时间】:2022-01-25 22:09:16
【问题描述】:

程序在本地PC运行时,运行正常,但如果在docker中运行会抛出以下错误:

Exception in thread "Thread-16" java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/Serializer
    at org.eclipse.kura.example.configurable.ConfigurableExample$1.run(ConfigurableExample.java:52)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.common.serialization.Serializer cannot be found by org.eclipse.kura.example.configurable_1.0.0.202201251713
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:484)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 2 more

但这在 LocalMachine 中运行良好。 什么问题?

【问题讨论】:

  • 看起来缺少一个 kafka 依赖项。
  • @RealSkeptic,在本地机器上运行时没有看到这个问题,如何解决?
  • 您需要解释如何在“本地机器”上运行代码。显然,Docker 没有使用您提供的在本地运行它的相同 Java 命令。最明显的例子是你的 IDE 可能会在类路径中包含所有声明的依赖项,但构建非 fat-jar 不会

标签: java apache-kafka


【解决方案1】:

这可以通过以下方式调试:

  1. 确保在 docker 容器中拥有所有必需的依赖项。您可能需要先检查您的 docker 基础映像。
  2. 检查您是否已正确设置类路径以包含该 jar 文件 (kafka-clients)。
  3. 验证用于启动服务的入口点/cmd,以检查它是否具有适当的类路径。
  4. 检查您的类加载器,看看为什么它无法加载该类。
  5. 如果您的可执行文件是 fat jar 文件,请检查该 jar 文件是否包含该类所在的 kafka-clients 库。

【讨论】:

  • 按照您的建议尝试了所有方法,这没有帮助,问题仍然存在。可能是我写的Kafka代码有问题,不确定……
猜你喜欢
  • 2011-07-08
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多