我正在努力使用 docker 编译和运行 java 文件。我有文件结构:
./Repo/
Dockerfile
./libs/
org.json.jar
./out/
Program.class
./src/
Program.java
我的 Dockerfile 看起来像这样:
FROM java:8-jdk-alpine
COPY /src /src/
COPY /out /out/
COPY /libs /libs/
RUN javac ..
CMD java ..
我希望能够在使用外部库的同时编译 src 中的文件并将它们输出到 out 中 我设法做到这一点的唯一方法是首先将 CD 插入/src/并运行以下命令:
javac -d ../out -cp ../libs/org.json.jar Program.java
但是肯定有办法从 Dockerfile 所在的目录执行此操作吗?
javac -d /out -cp /libs/org.json.jar /out/Program.java
下一个问题是运行上述程序所需的CMD。我不知道如何写这个。
或者我应该将 json lib 复制到已编译程序所在的 out 文件夹并运行以下 CMD:
java -cp "org.json.jar;" Server
最佳答案
您正在尝试从/out 路径而不是 src 编译 Program.java 文件,这可能就是它不起作用的原因。
试试这个
RUN javac -d /out -cp /libs/*.jar /src/Program.java
然后您将不需要复制文件夹,因为它会在构建容器时创建。当你运行docker build
时,事情应该编译
否则尝试在容器外部运行 javac,源计算机上不存在/out 和/src,因此您必须在命令中使用相对路径,然后仅复制 out 文件夹Dockerfile 并删除 javac 用法(并切换到使用 JRE 镜像)
关于java - 使用 dockerfile 中的外部库编译并运行 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58550871/