【发布时间】:2019-10-25 00:55:53
【问题描述】:
我正在努力使用 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 中的文件并输出它们 我设法做到这一点的唯一方法是首先将 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
【问题讨论】:
-
容器中不需要 src Java 文件...为什么不直接使用 Maven 或 Gradle 构建具有库依赖项的容器?
-
所以将它们编译出来并只复制 OUT 和 LIBS 文件夹?不幸的是,我不能使用 Gradle 或 Maven。不过,我如何仍然在 docker 中使用 CMD 运行程序?如果外部 .jar 位于不同的目录中,还是应该将 .jar 复制到 out 中?
-
你甚至不能使用Maven容器来构建一个项目,例如?抱歉,我没看到你在容器中运行 javac
-
很遗憾我不能使用Maven,我需要在dockerfile中使用javac和java
-
好吧,我不确定我是否理解限制。只要容器运行,谁会知道
FROM maven和FROM java之间的区别?
标签: java json docker dockerfile