FROM alpine:3.17 as BUILD RUN apk add --no-cache binutils maven openjdk17-jdk WORKDIR /build COPY pom.xml . RUN mvn dependency:go-offline COPY src/ /build/src/ RUN export BUILD_DIRECTORY="$(mvn help:evaluate -Dexpression='project.build.directory' -q -DforceStdout)" && \ export BUILD_NAME="$(mvn help:evaluate -Dexpression='project.build.finalName' -q -DforceStdout)" && \ mvn package && \ mkdir unpacked && \ cd unpacked && \ unzip /build/target/${BUILD_NAME}.jar && \ cd .. && \ mkdir -p /build/unpacked/BOOT-INF/lib && \ cp ${BUILD_DIRECTORY}/${BUILD_NAME}.lib/*.jar /build/unpacked/BOOT-INF/lib/ && \ jdeps \ --ignore-missing-deps \ --print-module-deps \ -q \ --recursive \ --multi-release 17 \ --class-path="./unpacked/BOOT-INF/lib/*" \ --module-path="./unpacked/BOOT-INF/lib/*" \ ${BUILD_DIRECTORY}/${BUILD_NAME}.jar > ${BUILD_DIRECTORY}/deps.info && \ jlink \ --verbose \ --add-modules $(cat ${BUILD_DIRECTORY}/deps.info) \ --strip-debug \ --no-man-pages \ --no-header-files \ --compress=2 \ --output ./jre && \ echo -e "#!/bin/sh\n" \ "/opt/jre/bin/java -jar ${BUILD_NAME}.jar" \ > ${BUILD_DIRECTORY}/run.sh && \ chmod 700 ${BUILD_DIRECTORY}/run.sh FROM alpine:3.17 COPY --from=BUILD /build/target/ /opt/target/ COPY --from=BUILD /build/jre /opt/jre WORKDIR /opt/target ENTRYPOINT ["./run.sh"]