我在嘗試運行具有與其關聯的包名稱的簡單 java 檔案時遇到問題。我的檔案是:
package com.example.springboot.folder.folder1;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
要編譯我使用的上述內容,javac HelloWorld.java但要運行它,我需要轉到 \com 之前的檔案夾結構并運行java com.example.springboot.folder.folder1.HelloWorld,它可以正常作業。
我現在正在嘗試使用 dockerfile 構建和運行它,我當前的 docker 檔案如下:
FROM alpine
WORKDIR /root/testdir
COPY HelloWorld.java /root/testdir
RUN apk add openjdk8
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV PATH $PATH:$JAVA_HOME/bin
RUN javac HelloWorld.java
CMD java -cp "java com.example.springboot.folder.folder1.HelloWorld"
它與 HelloWorld.java 程式放在同一級別
當我嘗試構建 usingdocker build .并運行 using 時docker run imageid,出現以下錯誤:
Error: Could not find or load main class HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
任何人都可以幫助我解決我可能出錯的地方嗎?
uj5u.com熱心網友回復:
CMD java -cp "java com.example.springboot.folder.folder1.HelloWorld"
你可以簡單地呼叫這個命令 : CMD java HelloWorld,什么將運行你HelloWorld.class在你的第一個命令之后生成的檔案 : RUN javac HelloWorld.java。
但這不是一個好方法。你應該提供給您的碼頭工人影像jar檔案,然后呼叫此命令:CMD ["java", "-jar", "/HelloWorld.jar"]。您需要打包您的專案并將其復制到您的 docker 鏡像中。
uj5u.com熱心網友回復:
您需要保留包結構才能使其正常作業。在您只需復制 java 源代碼的地方,您需要復制整個目錄才能使其作業。
您的 Dockerfile 應該如下所示:
FROM alpine
WORKDIR /root/testdir
ADD com /root/testdir/com
RUN apk add openjdk8
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV PATH $PATH:$JAVA_HOME/bin
RUN javac com/example/springboot/folder/folder1/HelloWorld.java
CMD ["java", "com.example.springboot.folder.folder1.HelloWorld"]
當然,最好使用 .jar 進行打包,因此按照 Harry Coder 提到的方式進行操作可能是您最好的選擇。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/353069.html
