Docker 在 IntelliJ 项目设置中找不到我的.java文件



我在IntelliJ上做了一个Java项目。文件结构,只是IntelliJ设置的默认文件结构,如下所示:

我想为整个项目构建一个Docker镜像(Main类从根文件夹中的driver-info.txt文件中获取输入(,并将其推送到Docker Hub。

我在根文件夹中创建了一个没有文件扩展名的Dockerfile,并在里面粘贴了(这直接来自我的课程材料(:

FROM openjdk:11
WORKDIR /app
COPY . /app
RUN javac *.java
CMD java Main

然后我转到命令终端,cd到这个项目的根目录(即C:\Users\User PC\IdeaProjects\Task_11_Capstone>(。我在那里输入(也直接从我的课程材料中粘贴(:

docker build -t java-app ./

它构建了步骤1和2,但在步骤3中给出了一个错误,称:

=> ERROR [4/4] RUN javac *.java                                                                                   0.4s
------
> [4/4] RUN javac *.java:
#8 0.363 error: file not found: *.java
#8 0.363 Usage: javac <options> <source files>
#8 0.363 use --help for a list of possible options
------
executor failed running [/bin/sh -c javac *.java]: exit code: 2

我认为Docker在src/com/company文件夹中查找我的java文件存在问题(请参阅我分享的关于项目文件结构的图片(。根据StackOverflow上的其他文章,我尝试过更改路径名称,也尝试过使用完全限定名称。但它们都给了我相同的错误信息。

我还尝试在其他类旁边的src/com.company文件夹中查找Dockerfile。但随后它重构了Dockerfile";COPY";语句说CCD_ 1。我认为这是正确的,因为我确实想将所有项目,包括根文件夹中的.txt文件复制到我的图像中。

然后,我cd到Dockerfile现在所在的文件夹(即C:\Users\User PC\IdeaProjects\Task_11_Capstone \src.com\company(来构建映像。这是正确的吗?还是我应该留在项目根文件夹中?无论如何,这样做确实允许我成功地构建图像。(我认为——这就是它所显示的(。

然而,到了运行图像的时候,我又陷入了困境。我在命令行中键入以下内容(直接取自我的课程材料(:

docker run java-app

它给了我一个错误信息:

Error: Could not find or load main class Main
Caused by: java.lang.NoClassDefFoundError: com/company/Main (wrong name: Main)

换句话说,如果我把Dockerfile放在java文件所在的位置,它似乎仍然找不到它们。

我尝试过Docker Hub论坛Stackoverflow,收到了10多封支持IntelliJ的来回电子邮件,并与我的课程导师进行了屏幕共享,我们只是不明白为什么它不会运行。我还卸载并重新安装了Docker,并创建了一个没有com.company包的项目版本。

作为一方,我成功地构建、运行和推送了其他Docker镜像,尤其是一个网站和一个简单的java程序。然而,只有当我在IntelliJ中的项目中尝试这样做时,它才会给我带来这些问题。值得注意的是,这也是一个连接到GitHub的Git存储库。

有什么想法我下一步可以试试吗?

尝试将Dockerfile上的RUN和CMD命令更改为

RUN javac com/comapny/*.java
CMD java -cp . com.company.Main

我假设Main在包裹com.company

最新更新