{% if config.multiStage %} # Multi-stage build for Java FROM maven:{{ config.javaVersion or '17' }}-alpine AS builder WORKDIR /app # Copy pom.xml COPY pom.xml . # Download dependencies RUN mvn dependency:go-offline # Copy source code COPY src ./src # Build application RUN mvn clean package -DskipTests # Production stage - JRE only for smaller image FROM openjdk:{{ config.javaVersion or '17' }}-jre-alpine WORKDIR /app # Install dumb-init for proper signal handling RUN apk add --no-cache dumb-init # Copy JAR from builder COPY --from=builder /app/target/*.jar app.jar # Create non-root user RUN addgroup -g 1001 -S java && \ adduser -S java -u 1001 && \ chown -R java:java /app USER java # Expose port EXPOSE {{ config.port or '8080' }} # Production mode ENV SPRING_PROFILES_ACTIVE=prod # Start application CMD ["java", "-jar", "app.jar"] {% else %} # Java {{ config.javaVersion or '17' }} Dockerfile FROM openjdk:{{ config.javaVersion or '17' }}-jdk-alpine WORKDIR /app # Install Maven RUN apk add --no-cache maven # Copy pom.xml COPY pom.xml . # Download dependencies RUN mvn dependency:go-offline # Copy source code COPY src ./src {% if not config.developmentMode %} # Build application RUN mvn clean package -DskipTests {% endif %} # Create non-root user RUN addgroup -g 1001 -S java && \ adduser -S java -u 1001 && \ chown -R java:java /app USER java # Expose port EXPOSE {{ config.port or '8080' }} {% if config.developmentMode %} # Development mode ENV SPRING_PROFILES_ACTIVE=dev CMD ["mvn", "spring-boot:run"] {% else %} # Production mode ENV SPRING_PROFILES_ACTIVE=prod # Start application CMD ["java", "-jar", "target/*.jar"] {% endif %} {% endif %}