77 lines
1.9 KiB
Docker

FROM eclipse-temurin:24 AS build
WORKDIR /build
# Create as small a runtime as possible but Spring/Tomcat needs a lot of modules
RUN jlink \
--output jre \
--add-modules java.sql,java.desktop,java.management,java.naming,java.security.jgss,java.instrument
COPY pom.xml mvnw ./
COPY .mvn .mvn
RUN ./mvnw dependency:copy-dependencies \
--activate-profiles=!persistent \
--define includeScope=compile \
--define outputDirectory=lib
RUN ./mvnw dependency:build-classpath \
--activate-profiles=!persistent \
--define includeScope=compile \
--define mdep.outputFile=classpath \
--define mdep.prefix=lib
COPY src src
RUN ./mvnw compile
FROM eclipse-temurin:24 AS training
WORKDIR /build
COPY --from=build /build/jre jre
COPY --from=build /build/lib lib
COPY --from=build /build/classpath classpath
COPY --from=build /build/target/classes classes
# There can be no directories on the classpath when training
RUN cd classes && jar -cf /build/app.jar *
# Adds the new jar to the classpath
RUN echo ":app.jar" >> classpath
RUN [ "./jre/bin/java" \
, "-cp", "@classpath" \
, "-XX:AOTMode=record" \
, "-XX:AOTConfiguration=app.aotconf" \
, "se.su.dsv.oauth2.Training" \
, "--spring.profiles.active=dev,embedded" \
]
RUN [ "./jre/bin/java" \
, "-cp", "@classpath" \
, "-XX:AOTMode=create" \
, "-XX:AOTConfiguration=app.aotconf" \
, "-XX:AOTCache=app.aot" \
, "se.su.dsv.oauth2.Training" \
, "--spring.profiles.active=dev,embedded" \
]
FROM debian:stable-slim AS runtime
WORKDIR /app
COPY --from=training /build/jre jre
COPY --from=training /build/lib lib
COPY --from=training /build/classpath classpath
COPY --from=training /build/app.jar app.jar
COPY --from=training /build/app.aot app.aot
EXPOSE 8080
CMD [ "./jre/bin/java" \
, "-cp", "@classpath" \
, "-XX:AOTCache=app.aot" \
, "se.su.dsv.oauth2.AuthorizationServer" \
, "--spring.profiles.active=dev,embedded" \
]