Как я могу узнать, какой модуль должен быть импортирован в образ времени выполнения Java? - PullRequest
1 голос
/ 17 июня 2019

Я запускаю свое простое приложение в образе времени выполнения Java, поэтому я пишу dockerfile для создания образа времени выполнения Java и строю образ Docker на его основе. Но когда я запускаю его, возникает исключение ClassNotFoundException.

https://docs.oracle.com/en/java/javase/11/docs/api/java.xml/org/xml/sax/SAXNotRecognizedException.html этот класс был определен в модуле java.xml, поэтому я добавляю этот модуль в свой образ времени выполнения java.

это мой файл докера:

FROM openjdk:oracle as packager

ENV JAVA_MINIMAL="/opt/java-minimal"

RUN jlink \
            --verbose \
            --add-modules \
                java.xml \
            --compress 2 \
            --strip-debug \
            --no-header-files \
            --no-man-pages \
            --output "$JAVA_MINIMAL"

FROM oraclelinux:7-slim

ENV JAVA_HOME "/opt/java-minimal"
ENV PATH $JAVA_HOME/bin:$PATH
ENV DATA_CONFIG /dataconfig
ENV DATA_OUTPUT /dataconfig

COPY --from=packager  "$JAVA_HOME" "$JAVA_HOME"
COPY "target/jmtool.cli-1.0-SNAPSHOT.jar" "/app/app.jar"
COPY "target/dependency" "/app/dependency"

WORKDIR /app

ENTRYPOINT ["java", "-p", "app.jar:dependency", "-m", "jmtool.cli/jmtool.cli.Entrance"]

это полная трассировка ошибок.

Exception in thread "main" java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException
        at jmtool.base@1.0-SNAPSHOT/jmtool.base.config.ExportConfigLoader.loadConfig(ExportConfigLoader.java:37)
        at jmtool.cli@1.0-SNAPSHOT/jmtool.cli.Entrance.rewriteConfig(Entrance.java:79)
        at jmtool.cli@1.0-SNAPSHOT/jmtool.cli.Entrance.doCommand(Entrance.java:73)
        at jmtool.cli@1.0-SNAPSHOT/jmtool.cli.Entrance.main(Entrance.java:51)
Caused by: java.lang.ClassNotFoundException: org.xml.sax.SAXNotRecognizedException
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
...