如何使用docker和ubuntu编译java类



我试图使用docker启动我的应用程序。应用程序由MonoThreadClientHandler.java和tcp_server.java (https://github.com/MikhailYuzhakov/tcp_server/tree/master)组成。Dockerfile:

FROM alpine:latest
RUN apk update && apk upgrade && apk add git
RUN apk update && apk add openjdk11
RUN apk update && apk add bash
RUN git init && git remote add origin https://github.com/MikhailYuzhakov/tcp_server.git && git pull origin master
RUN javac -classpath ./json-simple-1.1.1.jar -d . MonoThreadClientHandler.java && javac -d . tcp_server.java
CMD ["java", "tcp_server"]

我使用-classpath编译依赖项。当应用程序正在运行,客户端试图连接到服务器,我得到错误代码:

Server 2.0 socket 0.0.0.0/0.0.0.0:3345 created
Connection with /45.137.112.110:61395 accepted.Exception in thread "pool-1-thread-1" java.lang.NoClassDefFoundError: org/json/simple/parser/JSONParser
at Database.parseDate(MonoThreadClientHandler.java:95)
at MonoThreadClientHandler.run(MonoThreadClientHandler.java:28)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.JSONParser
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 5 more

我尝试用-d, -cp, -classpath等修改编译命令javac,但没有结果。

编译工作正常。您没有使用CMD指定类路径。你可以用ENV来指定。你也可以结合javac命令。如,

ENV CLASSPATH=.:./json-simple-1.1.1.jar
RUN javac -d . MonoThreadClientHandler.java tcp_server.java
CMD ["java", "tcp_server"]

最新更新