java - 使用 dockerfile 中的外部库编译并运行 java

标签 java json docker dockerfile

我正在努力使用 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/

相关文章:

java - 如何从Json对象中获取数据?

Java 相当于 python GET 请求?

java - Spring boot项目如何保存DB用户名和密码

asp.net - Windows 容器中的容器文件权限

google-chrome - 我的容器化 Puppeteer 如何与我的主机 Chrome 通信?

java - 局部保留哈希函数

java - 使用 JSON Post 请求创建对象

json - 如何创建具有多个数组的 JSON 对象?

php - 为 JSON 多维数组创建表

docker - 如何让 Jupyter Docker 容器使用更多内存