簡體   English   中英

Docker 運行失敗並出現 NoClassDefFoundError - 即使依賴 jar 在類路徑中

[英]Docker run fails with NoClassDefFoundError - even though dependant jar is in classpath

我是 docker 新手。 我正在嘗試在容器中運行 java class 。 我的主要 class 取決於本地 jar。 我能夠將 jar 添加到 docker 映像中,並且能夠在類路徑中設置 jar。

但是,當運行容器時,它仍然失敗,並出現“線程“主”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"]

請幫我確定問題

您的Dockerfile比需要的復雜。 你可以:

FROM java:8

COPY Test.jar /

ENV CLASSPATH=/usr/myjars
RUN mkdir -p ${CLASSPATH}
COPY Dependant.jar ${CLASSPATH}

# You need the SHELL form of CMD or ENTRYPOINT because you're using ENV
ENTRYPOINT java -jar /Test.jar

通常,當我們嘗試從 JAR 文件中運行 java class 時,Z18B5A217C4DAD256D62D 不會考慮環境相反,它將在 jar 中查看清單文件的 class 路徑定義。

參考: https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

考慮到這種情況,我已經使用以下清單更正了我的 CheckSum.jar/Dependant.jar 的創建。

清單文件

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM