java - Docker 运行失败并出现 NoClassDefFoundError - 即使依赖的 jar 位于类路径中

标签 java docker

我是一个 jetty 新手。我正在尝试在容器中运行 java 类。 我的主要类(class)取决于本地 jar 。能够将 jar 添加到 docker 镜像 并能够在类路径中设置 jar。

但是,当运行容器时,它仍然失败,并显示“线程“main”java.lang.NoClassDefFoundError 中出现异常”

我的 Dockerfile

FROM java:8

WORKDIR /

ADD Test.jar Test.jar

ADD Dependant.jar Dependant.jar

RUN mkdir /usr/myjars

COPY /Dependant.jar /usr/myjars/Dependant.jar

ENV CLASSPATH .:/usr/myjars/Dependant.jar

RUN export CLASSPATH=.:/usr/myjars/Dependant.jar

CMD ["java",  "-jar", "Test.jar"]

请帮我找出问题

最佳答案

通常当我们尝试从 JAR 文件运行 java 类时, JVM不会考虑环境CLASSPATH。相反,它会查找 jar 中 list 文件的类路径定义。

引用:https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

考虑到这种情况,我已使用以下 list 更正了 CheckSum.jar/Dependant.jar 的创建。

MANIFEST.MF

Manifest-Version: 1.0
Class-Path: . /usr/myjars/PaytmChecksum.jar
Main-Class: TestChecksumGeneration

以下是我更正后的 Docker 文件。

Dockerfile

FROM java:8

COPY CheckSum.jar /

ENV JARDIR=/usr/myjars

RUN mkdir -p ${JARDIR}

COPY PaytmChecksum.jar ${JARDIR}

ENTRYPOINT java -jar /CheckSum.jar

注意:我没有向我的 docker 容器提供任何 CLASSPATH

关于java - Docker 运行失败并出现 NoClassDefFoundError - 即使依赖的 jar 位于类路径中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58843959/

相关文章:

java - 在运行时更新 JAR

运行 golang http.Client 的 Docker 容器出现错误 `certificate signed by unknown authority`

docker - 无法增加最大应用程序主资源

python - 适用于Python的Docker SDK-如何保持容器不处于交互模式

java - 为什么 ScheduledExecutorService 没有按预期工作?

couchdb - 如何从 couchdb 获取所有文档以某个单词开头。轻沙发有可能吗?

java - @Entity 与 @Persistencecapable

java - JBoss EAP6 - 无法创建 JDBC 数据源 (Microsoft SQL Server)

c# - 如何降低 dockerized .Net Core 应用程序的大小?

docker - 将Hospath添加到Kubernetes Statefulset