diff --git a/.github/workflows/graalvm.yml b/.github/workflows/graalvm.yml index d6fcd48ec..198582d29 100644 --- a/.github/workflows/graalvm.yml +++ b/.github/workflows/graalvm.yml @@ -39,7 +39,7 @@ jobs: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Run tests run: | - ./mvnw install && ./mvnw verify + ./mvnw install -Dinvoker.skip=true && ./mvnw verify env: GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USERNAME }} diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index 84a0a3dc0..94d9ea8bf 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -34,7 +34,7 @@ jobs: - name: Run tests run: | - (./mvnw install && ./mvnw verify 2>&1) | tee /tmp/maven.out + (./mvnw install -Dinvoker.skip=true && ./mvnw verify 2>&1) | tee /tmp/maven.out env: GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USERNAME }} diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index 379551247..83f5d6c06 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -33,7 +33,7 @@ jobs: - name: Analyse with Maven run: | - ./mvnw install && ./mvnw verify sonar:sonar + ./mvnw install -Dinvoker.skip=true && ./mvnw verify sonar:sonar env: GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GRADLE_ENTERPRISE_CACHE_USERNAME }} diff --git a/.github/workflows/windows-ci.yml b/.github/workflows/windows-ci.yml index e16cf98ed..935374a36 100644 --- a/.github/workflows/windows-ci.yml +++ b/.github/workflows/windows-ci.yml @@ -39,7 +39,7 @@ jobs: - name: Build with Maven shell: cmd run: | - .\mvnw install && .\mvnw verify + .\mvnw install -Dinvoker.skip=true && .\mvnw verify env: TESTCONTAINERS_RYUK_DISABLED: true GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GRADLE_ENTERPRISE_ACCESS_KEY }} diff --git a/examples/java/pom.xml b/examples/java/pom.xml index 8221b9ce1..a824a6f7f 100644 --- a/examples/java/pom.xml +++ b/examples/java/pom.xml @@ -24,7 +24,7 @@ io.micronaut.maven.examples false 2.0.0-SNAPSHOT - 0.9.19 + 0.9.20 3.2.0 3.2.1 @@ -53,7 +53,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/aot-sample/pom.xml b/micronaut-maven-integration-tests/src/it/aot-sample/pom.xml index fbfae2ed7..3e836e8d4 100644 --- a/micronaut-maven-integration-tests/src/it/aot-sample/pom.xml +++ b/micronaut-maven-integration-tests/src/it/aot-sample/pom.xml @@ -31,7 +31,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/deploy/pom.xml b/micronaut-maven-integration-tests/src/it/deploy/pom.xml index f52c40617..3e002188d 100644 --- a/micronaut-maven-integration-tests/src/it/deploy/pom.xml +++ b/micronaut-maven-integration-tests/src/it/deploy/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.build.examples.Application + @native-maven-plugin.version@ jar netty @@ -27,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-crac/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-crac/pom.xml index 56da9f2cf..3e8998f5c 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-crac/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-crac/pom.xml @@ -27,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-lambda/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-lambda/pom.xml index a36164777..804ef6f59 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-lambda/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-lambda/pom.xml @@ -27,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/Dockerfile b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/Dockerfile index 3bf3808d8..38ff34f9b 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/Dockerfile +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/Dockerfile @@ -3,8 +3,9 @@ WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image -H:+StaticExecutableWithDynamicLibC -Ob -H:Class=io.micronaut.build.examples.Application -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args -H:Class=io.micronaut.build.examples.Application -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM gcr.io/distroless/cc-debian10 COPY --from=builder /home/app/application /app/application diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/invoker.properties b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/invoker.properties index 37a437645..8e8a5f9bc 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/invoker.properties +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/invoker.properties @@ -1,2 +1,2 @@ -invoker.goals = -ntp mn:dockerfile -Dpackaging=docker-native +invoker.goals = -ntp -e mn:dockerfile -Dpackaging=docker-native invoker.os.family = !windows diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/pom.xml index 328ee757c..2c0f04551 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.build.examples.Application + @native-maven-plugin.version@ jar netty @@ -27,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/verify.groovy b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/verify.groovy index 8e6e7921d..9fcefd62b 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/verify.groovy +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-distroless/verify.groovy @@ -1,4 +1,11 @@ File dockerfile = new File("$basedir/target", "Dockerfile") File expectedDockerfile = new File(basedir, "Dockerfile") -assert dockerfile.text == expectedDockerfile.text \ No newline at end of file +assert dockerfile.text == expectedDockerfile.text + +File log = new File(basedir, 'build.log') +assert log.exists() +assert log.text.contains("BUILD SUCCESS") +assert log.text.contains("Generating a mostly static native image") +assert log.text.contains("GraalVM native image build args:") +assert log.text.contains("-H:+StaticExecutableWithDynamicLibC") \ No newline at end of file diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/Dockerfile.aarch64 b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/Dockerfile.aarch64 index c78d86217..4cd6fd0c2 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/Dockerfile.aarch64 +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/Dockerfile.aarch64 @@ -10,8 +10,9 @@ ENV PATH=/usr/lib/graalvm/bin:${PATH} WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image -Ob -H:Class=io.micronaut.function.aws.runtime.MicronautLambdaRuntime -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args -H:Class=io.micronaut.function.aws.runtime.MicronautLambdaRuntime -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM amazonlinux:latest WORKDIR /function diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/Dockerfile.amd64 b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/Dockerfile.amd64 index 6e411300b..b88ab32f0 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/Dockerfile.amd64 +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/Dockerfile.amd64 @@ -10,8 +10,9 @@ ENV PATH=/usr/lib/graalvm/bin:${PATH} WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image -Ob -H:Class=io.micronaut.function.aws.runtime.MicronautLambdaRuntime -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args -H:Class=io.micronaut.function.aws.runtime.MicronautLambdaRuntime -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM amazonlinux:latest WORKDIR /function diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/pom.xml index 3b0bfe0ce..7d588a48f 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-lambda/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.function.aws.runtime.MicronautLambdaRuntime + @native-maven-plugin.version@ lambda @@ -26,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-netty/Dockerfile b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-netty/Dockerfile index b118137b3..0cef2f28d 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-netty/Dockerfile +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-netty/Dockerfile @@ -3,8 +3,9 @@ WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image -Ob -H:Class=io.micronaut.build.examples.Application -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args -H:Class=io.micronaut.build.examples.Application -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM frolvlad/alpine-glibc:alpine-3.12 RUN apk update && apk add libstdc++ diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-netty/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-netty/pom.xml index 9352f9376..f34d124e2 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-netty/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-netty/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.build.examples.Application + @native-maven-plugin.version@ jar netty @@ -27,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-oracle-function/Dockerfile b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-oracle-function/Dockerfile index 6fa6b54b6..d16878b4e 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-oracle-function/Dockerfile +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-oracle-function/Dockerfile @@ -3,8 +3,9 @@ WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image -Ob --report-unsupported-elements-at-runtime -H:Class=com.fnproject.fn.runtime.EntryPoint -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args --report-unsupported-elements-at-runtime -H:Class=com.fnproject.fn.runtime.EntryPoint -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM fnproject/fn-java-fdk:jre17-latest AS fnfdk diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-oracle-function/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-oracle-function/pom.xml index 60bdb88e9..ced49a1f7 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-oracle-function/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-oracle-function/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.build.examples.Application + @native-maven-plugin.version@ jar netty @@ -27,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-static/Dockerfile b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-static/Dockerfile index 4a08e67dc..4d90d38e1 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-static/Dockerfile +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-static/Dockerfile @@ -19,8 +19,9 @@ RUN curl -L -o zlib.tar.gz https://zlib.net/zlib-1.2.12.tar.gz && \ WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image -Ob --static --libc=musl -H:Class=io.micronaut.build.examples.Application -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args --static --libc=musl -H:Class=io.micronaut.build.examples.Application -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM scratch COPY --from=builder /home/app/application /app/application diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-static/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-static/pom.xml index 78efdde5e..a45282277 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-static/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-native-static/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.build.examples.Application + @native-maven-plugin.version@ jar netty @@ -27,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-netty/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-netty/pom.xml index 7c7901cb9..bbdafb276 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-netty/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-netty/pom.xml @@ -27,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/dockerfile-docker-oracle-function/pom.xml b/micronaut-maven-integration-tests/src/it/dockerfile-docker-oracle-function/pom.xml index 45279d1bb..12fa1ac30 100644 --- a/micronaut-maven-integration-tests/src/it/dockerfile-docker-oracle-function/pom.xml +++ b/micronaut-maven-integration-tests/src/it/dockerfile-docker-oracle-function/pom.xml @@ -27,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/issue375/pom.xml b/micronaut-maven-integration-tests/src/it/issue375/pom.xml index eb1c48bf0..f4d00b896 100644 --- a/micronaut-maven-integration-tests/src/it/issue375/pom.xml +++ b/micronaut-maven-integration-tests/src/it/issue375/pom.xml @@ -31,7 +31,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/issue465/pom.xml b/micronaut-maven-integration-tests/src/it/issue465/pom.xml index 769d2d39d..f23bad164 100644 --- a/micronaut-maven-integration-tests/src/it/issue465/pom.xml +++ b/micronaut-maven-integration-tests/src/it/issue465/pom.xml @@ -33,7 +33,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package native image aot/pom.xml b/micronaut-maven-integration-tests/src/it/package native image aot/pom.xml index acaf09966..2536fba3a 100644 --- a/micronaut-maven-integration-tests/src/it/package native image aot/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package native image aot/pom.xml @@ -31,7 +31,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-docker-crac-aot/pom.xml b/micronaut-maven-integration-tests/src/it/package-docker-crac-aot/pom.xml index e24371271..55282ab5a 100644 --- a/micronaut-maven-integration-tests/src/it/package-docker-crac-aot/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-docker-crac-aot/pom.xml @@ -30,7 +30,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-docker-crac/pom.xml b/micronaut-maven-integration-tests/src/it/package-docker-crac/pom.xml index 78112b770..ee4043263 100644 --- a/micronaut-maven-integration-tests/src/it/package-docker-crac/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-docker-crac/pom.xml @@ -27,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-docker-native-distroless/pom.xml b/micronaut-maven-integration-tests/src/it/package-docker-native-distroless/pom.xml index d27070934..c91a9b7fd 100644 --- a/micronaut-maven-integration-tests/src/it/package-docker-native-distroless/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-docker-native-distroless/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.build.examples.Application + @native-maven-plugin.version@ jar netty @@ -27,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-docker-native-distroless/verify.groovy b/micronaut-maven-integration-tests/src/it/package-docker-native-distroless/verify.groovy index b1de62afa..11310b39f 100644 --- a/micronaut-maven-integration-tests/src/it/package-docker-native-distroless/verify.groovy +++ b/micronaut-maven-integration-tests/src/it/package-docker-native-distroless/verify.groovy @@ -2,4 +2,4 @@ File log = new File(basedir, 'build.log') assert log.exists() assert log.text.contains("Generating a mostly static native image") assert log.text.contains("Using BASE_IMAGE_RUN: gcr.io/distroless/cc-debian10") -assert log.text.contains("Using GRAALVM_ARGS: -H:+StaticExecutableWithDynamicLibC") +assert log.text.contains("-H:+StaticExecutableWithDynamicLibC") diff --git a/micronaut-maven-integration-tests/src/it/package-docker-native-static/pom.xml b/micronaut-maven-integration-tests/src/it/package-docker-native-static/pom.xml index 03ac1867a..44c432eb9 100644 --- a/micronaut-maven-integration-tests/src/it/package-docker-native-static/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-docker-native-static/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.build.examples.Application + @native-maven-plugin.version@ jar netty @@ -27,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-docker-native/pom.xml b/micronaut-maven-integration-tests/src/it/package-docker-native/pom.xml index cd8ec397a..9c4d78ebd 100644 --- a/micronaut-maven-integration-tests/src/it/package-docker-native/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-docker-native/pom.xml @@ -16,6 +16,7 @@ @it.micronaut.version@ @project.version@ io.micronaut.build.examples.Application + @native-maven-plugin.version@ jar netty @@ -27,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-docker/pom.xml b/micronaut-maven-integration-tests/src/it/package-docker/pom.xml index 786e210af..dc2b7a84c 100644 --- a/micronaut-maven-integration-tests/src/it/package-docker/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-docker/pom.xml @@ -27,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-jar-aot/pom.xml b/micronaut-maven-integration-tests/src/it/package-jar-aot/pom.xml index 85e0b9c0a..fa8f1c9ad 100644 --- a/micronaut-maven-integration-tests/src/it/package-jar-aot/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-jar-aot/pom.xml @@ -30,7 +30,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-jar/pom.xml b/micronaut-maven-integration-tests/src/it/package-jar/pom.xml index fabbc5718..fc17dee45 100644 --- a/micronaut-maven-integration-tests/src/it/package-jar/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-jar/pom.xml @@ -27,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-native-image-aot/pom.xml b/micronaut-maven-integration-tests/src/it/package-native-image-aot/pom.xml index 54488b496..980978a09 100644 --- a/micronaut-maven-integration-tests/src/it/package-native-image-aot/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-native-image-aot/pom.xml @@ -31,7 +31,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/package-native-image/pom.xml b/micronaut-maven-integration-tests/src/it/package-native-image/pom.xml index eb0958331..68e4104c1 100644 --- a/micronaut-maven-integration-tests/src/it/package-native-image/pom.xml +++ b/micronaut-maven-integration-tests/src/it/package-native-image/pom.xml @@ -28,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/run-aot/pom.xml b/micronaut-maven-integration-tests/src/it/run-aot/pom.xml index 0911e7cda..5661d8c76 100644 --- a/micronaut-maven-integration-tests/src/it/run-aot/pom.xml +++ b/micronaut-maven-integration-tests/src/it/run-aot/pom.xml @@ -31,7 +31,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/run/pom.xml b/micronaut-maven-integration-tests/src/it/run/pom.xml index 912c4202e..adbe90c65 100644 --- a/micronaut-maven-integration-tests/src/it/run/pom.xml +++ b/micronaut-maven-integration-tests/src/it/run/pom.xml @@ -28,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/settings.xml b/micronaut-maven-integration-tests/src/it/settings.xml index 9b2ba6d4f..91658035a 100644 --- a/micronaut-maven-integration-tests/src/it/settings.xml +++ b/micronaut-maven-integration-tests/src/it/settings.xml @@ -41,6 +41,17 @@ ignore + + graalvm-native-build-tools-snapshots + GraalVM native-build-tools Snapshots + https://raw.githubusercontent.com/graalvm/native-build-tools/snapshots + + true + + + false + + diff --git a/micronaut-maven-integration-tests/src/it/snakeyaml-missing/pom.xml b/micronaut-maven-integration-tests/src/it/snakeyaml-missing/pom.xml index 3938ee9ad..c3e8bf54e 100644 --- a/micronaut-maven-integration-tests/src/it/snakeyaml-missing/pom.xml +++ b/micronaut-maven-integration-tests/src/it/snakeyaml-missing/pom.xml @@ -29,7 +29,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/snakeyaml-present/pom.xml b/micronaut-maven-integration-tests/src/it/snakeyaml-present/pom.xml index d7aa6fac9..8b3d9c14a 100644 --- a/micronaut-maven-integration-tests/src/it/snakeyaml-present/pom.xml +++ b/micronaut-maven-integration-tests/src/it/snakeyaml-present/pom.xml @@ -29,7 +29,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile diff --git a/micronaut-maven-integration-tests/src/it/test-resources-custom-dependency/pom.xml b/micronaut-maven-integration-tests/src/it/test-resources-custom-dependency/pom.xml index a597d6f17..2744ac589 100644 --- a/micronaut-maven-integration-tests/src/it/test-resources-custom-dependency/pom.xml +++ b/micronaut-maven-integration-tests/src/it/test-resources-custom-dependency/pom.xml @@ -28,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile @@ -140,8 +140,8 @@ ${micronaut.version} - io.micronaut - micronaut-validation + io.micronaut.validation + micronaut-validation-processor ${micronaut.version} diff --git a/micronaut-maven-integration-tests/src/it/test-resources-disabled/pom.xml b/micronaut-maven-integration-tests/src/it/test-resources-disabled/pom.xml index 407e36ad4..78452c533 100644 --- a/micronaut-maven-integration-tests/src/it/test-resources-disabled/pom.xml +++ b/micronaut-maven-integration-tests/src/it/test-resources-disabled/pom.xml @@ -27,7 +27,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile @@ -126,8 +126,8 @@ ${micronaut.version} - io.micronaut - micronaut-validation + io.micronaut.validation + micronaut-validation-processor ${micronaut.version} diff --git a/micronaut-maven-integration-tests/src/it/test-resources-failing-test/pom.xml b/micronaut-maven-integration-tests/src/it/test-resources-failing-test/pom.xml index f64f7d312..62c0e5343 100644 --- a/micronaut-maven-integration-tests/src/it/test-resources-failing-test/pom.xml +++ b/micronaut-maven-integration-tests/src/it/test-resources-failing-test/pom.xml @@ -28,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile @@ -127,8 +127,8 @@ ${micronaut.version} - io.micronaut - micronaut-validation + io.micronaut.validation + micronaut-validation-processor ${micronaut.version} diff --git a/micronaut-maven-integration-tests/src/it/test-resources-shared-namespace/pom.xml b/micronaut-maven-integration-tests/src/it/test-resources-shared-namespace/pom.xml index 1d001c25c..397e9c7ab 100644 --- a/micronaut-maven-integration-tests/src/it/test-resources-shared-namespace/pom.xml +++ b/micronaut-maven-integration-tests/src/it/test-resources-shared-namespace/pom.xml @@ -28,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile @@ -127,8 +127,8 @@ ${micronaut.version} - io.micronaut - micronaut-validation + io.micronaut.validation + micronaut-validation-processor ${micronaut.version} diff --git a/micronaut-maven-integration-tests/src/it/test-resources-shared/pom.xml b/micronaut-maven-integration-tests/src/it/test-resources-shared/pom.xml index 80f3cf59c..167bd9580 100644 --- a/micronaut-maven-integration-tests/src/it/test-resources-shared/pom.xml +++ b/micronaut-maven-integration-tests/src/it/test-resources-shared/pom.xml @@ -28,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile @@ -130,8 +130,8 @@ ${micronaut.version} - io.micronaut - micronaut-validation + io.micronaut.validation + micronaut-validation-processor ${micronaut.version} diff --git a/micronaut-maven-integration-tests/src/it/test-resources/pom.xml b/micronaut-maven-integration-tests/src/it/test-resources/pom.xml index 0827ab7fd..016c50859 100644 --- a/micronaut-maven-integration-tests/src/it/test-resources/pom.xml +++ b/micronaut-maven-integration-tests/src/it/test-resources/pom.xml @@ -28,7 +28,7 @@ compile - io.micronaut + io.micronaut.validation micronaut-validation compile @@ -127,8 +127,8 @@ ${micronaut.version} - io.micronaut - micronaut-validation + io.micronaut.validation + micronaut-validation-processor ${micronaut.version} diff --git a/micronaut-maven-plugin/pom.xml b/micronaut-maven-plugin/pom.xml index b47e94c59..fb08bc642 100644 --- a/micronaut-maven-plugin/pom.xml +++ b/micronaut-maven-plugin/pom.xml @@ -71,7 +71,7 @@ org.graalvm.buildtools - native-maven-plugin + utils ${native-maven-plugin.version} diff --git a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/DockerNativeMojo.java b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/DockerNativeMojo.java index 43e6c9c17..ee4acd5c0 100644 --- a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/DockerNativeMojo.java +++ b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/DockerNativeMojo.java @@ -19,7 +19,6 @@ import com.google.cloud.tools.jib.api.ImageReference; import com.google.cloud.tools.jib.api.InvalidImageReferenceException; import com.google.common.io.FileWriteMode; -import com.google.common.io.Files; import io.micronaut.maven.core.MicronautRuntime; import io.micronaut.maven.services.ApplicationConfigurationService; import io.micronaut.maven.services.DockerService; @@ -29,11 +28,17 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; +import org.graalvm.buildtools.utils.NativeImageUtils; import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -51,9 +56,9 @@ public class DockerNativeMojo extends AbstractDockerMojo { public static final String DOCKER_NATIVE_PACKAGING = "docker-native"; - public static final String GRAALVM_ARGS = "GRAALVM_ARGS"; public static final String MICRONAUT_PARENT = "io.micronaut:micronaut-parent"; public static final String MICRONAUT_VERSION = "micronaut.version"; + public static final String ARGS_FILE_PROPERTY_NAME = "graalvm.native-image.args-file"; @SuppressWarnings("CdiInjectionPointsInspection") @Inject @@ -141,12 +146,6 @@ private void buildDockerNativeLambda() throws IOException { getLog().info("Using CLASS_NAME: " + mainClass); buildImageCmd.withBuildArg("CLASS_NAME", mainClass); - String graalVmBuildArgs = getGraalVmBuildArgs(); - if (graalVmBuildArgs != null && !graalVmBuildArgs.isEmpty()) { - getLog().info("Using GRAALVM_ARGS: " + graalVmBuildArgs); - buildImageCmd = buildImageCmd.withBuildArg(GRAALVM_ARGS, graalVmBuildArgs); - } - String imageId = dockerService.buildImage(buildImageCmd); File functionZip = dockerService.copyFromContainer(imageId, "/function/function.zip"); getLog().info("AWS Lambda Custom Runtime ZIP: " + functionZip.getPath()); @@ -183,43 +182,48 @@ private void buildDockerfile(String dockerfileName, boolean passClassName) throw if (appArguments != null && !appArguments.isEmpty()) { getLog().info("Using application arguments: " + appArguments); - Files.asCharSink(dockerfile, Charset.defaultCharset(), FileWriteMode.APPEND).write(System.lineSeparator() + getCmd()); + com.google.common.io.Files.asCharSink(dockerfile, Charset.defaultCharset(), FileWriteMode.APPEND).write(System.lineSeparator() + getCmd()); } - BuildImageCmd buildImageCmd = dockerService.buildImageCmd() - .withDockerfile(dockerfile) - .withTags(getTags()) - .withBuildArg("BASE_IMAGE", from) - .withBuildArg("PORT", port); + Map buildImageCmdArguments = new HashMap<>(); getLog().info("Using BASE_IMAGE: " + from); if (StringUtils.isNotEmpty(baseImageRun) && !staticNativeImage) { - getLog().info("Using BASE_IMAGE_RUN: " + baseImageRun); - buildImageCmd.withBuildArg("BASE_IMAGE_RUN", baseImageRun); + buildImageCmdArguments.put("BASE_IMAGE_RUN", baseImageRun); } if (baseImageRun.contains("alpine-glibc")) { - buildImageCmd.withBuildArg("EXTRA_CMD", "apk update && apk add libstdc++"); - } else { - buildImageCmd.withBuildArg("EXTRA_CMD", ""); + buildImageCmdArguments.put("EXTRA_CMD", "apk update && apk add libstdc++"); } if (passClassName) { - getLog().info("Using CLASS_NAME: " + mainClass); - buildImageCmd = buildImageCmd.withBuildArg("CLASS_NAME", mainClass); + buildImageCmdArguments.put("CLASS_NAME", mainClass); } - String graalVmBuildArgs = getGraalVmBuildArgs(); - if (baseImageRun.contains("distroless") && !graalVmBuildArgs.contains(MOSTLY_STATIC_NATIVE_IMAGE_GRAALVM_FLAG)) { - graalVmBuildArgs = MOSTLY_STATIC_NATIVE_IMAGE_GRAALVM_FLAG + " " + graalVmBuildArgs; - } + String argsFile = mavenProject.getProperties().getProperty(ARGS_FILE_PROPERTY_NAME); + List allNativeImageBuildArgs = MojoUtils.computeNativeImageArgs(nativeImageBuildArgs, baseImageRun, argsFile); + getLog().info("GraalVM native image build args: " + allNativeImageBuildArgs); + List conversionResult = NativeImageUtils.convertToArgsFile(allNativeImageBuildArgs, Paths.get(mavenProject.getBuild().getDirectory())); + if (conversionResult.size() == 1) { + Files.delete(Paths.get(argsFile)); + + BuildImageCmd buildImageCmd = dockerService.buildImageCmd() + .withDockerfile(dockerfile) + .withTags(getTags()) + .withBuildArg("BASE_IMAGE", from) + .withBuildArg("PORT", port); + + for (Map.Entry buildArg : buildImageCmdArguments.entrySet()) { + String key = buildArg.getKey(); + String value = buildArg.getValue(); + getLog().info("Using " + key + ": " + value); + buildImageCmd.withBuildArg(key, value); + } - if (graalVmBuildArgs != null && !graalVmBuildArgs.isEmpty()) { - getLog().info("Using GRAALVM_ARGS: " + graalVmBuildArgs); - buildImageCmd = buildImageCmd.withBuildArg(GRAALVM_ARGS, graalVmBuildArgs); + dockerService.buildImage(buildImageCmd); + } else { + throw new IOException("Unable to convert native image build args to args file"); } - - dockerService.buildImage(buildImageCmd); } } diff --git a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/DockerfileMojo.java b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/DockerfileMojo.java index bbb70fd5a..c21b6da8f 100644 --- a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/DockerfileMojo.java +++ b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/DockerfileMojo.java @@ -20,19 +20,26 @@ import io.micronaut.maven.services.ApplicationConfigurationService; import io.micronaut.maven.services.DockerService; import io.micronaut.maven.jib.JibConfigurationService; +import io.micronaut.maven.services.ExecutorService; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.invoker.MavenInvocationException; import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static io.micronaut.maven.DockerNativeMojo.ARGS_FILE_PROPERTY_NAME; /** *

Generates a Dockerfile depending on the packaging and micronaut.runtime @@ -56,10 +63,13 @@ public class DockerfileMojo extends AbstractDockerMojo { public static final String DOCKERFILE_NATIVE_STATIC = "DockerfileNativeStatic"; public static final String DOCKERFILE_NATIVE_ORACLE_CLOUD = "DockerfileNativeOracleCloud"; + private final ExecutorService executorService; + @Inject public DockerfileMojo(MavenProject mavenProject, DockerService dockerService, JibConfigurationService jibConfigurationService, - ApplicationConfigurationService applicationConfigurationService) { + ApplicationConfigurationService applicationConfigurationService, ExecutorService executorService) { super(mavenProject, jibConfigurationService, applicationConfigurationService, dockerService); + this.executorService = executorService; } @Override @@ -77,7 +87,7 @@ public void execute() throws MojoExecutionException { dockerfile.ifPresent(file -> getLog().info("Dockerfile written to: " + file.getAbsolutePath())); - } catch (IOException e) { + } catch (IOException | MavenInvocationException e) { throw new MojoExecutionException(e.getMessage(), e); } } @@ -129,7 +139,9 @@ private void processOracleFunctionDockerfile(File dockerfile) throws IOException } } - private Optional buildDockerfileNative(MicronautRuntime runtime) throws IOException { + private Optional buildDockerfileNative(MicronautRuntime runtime) throws IOException, MavenInvocationException { + getLog().info("Generating GraalVM args file"); + executorService.invokeGoal("org.graalvm.buildtools:native-maven-plugin", "write-args-file"); File dockerfile; switch (runtime.getBuildStrategy()) { case LAMBDA -> { @@ -174,16 +186,10 @@ private void processDockerfile(File dockerfile) throws IOException { result.add(""); } } else if (line.contains("GRAALVM_") || line.contains("CLASS_NAME")) { - String graalVmBuildArgs = getGraalVmBuildArgs(); - if (baseImageRun.contains("distroless") && !graalVmBuildArgs.contains(MOSTLY_STATIC_NATIVE_IMAGE_GRAALVM_FLAG)) { - graalVmBuildArgs = MOSTLY_STATIC_NATIVE_IMAGE_GRAALVM_FLAG + " " + graalVmBuildArgs; - } - result.add(line .replace("${GRAALVM_VERSION}", graalVmVersion()) .replace("${GRAALVM_JVM_VERSION}", graalVmJvmVersion()) .replace("${GRAALVM_ARCH}", graalVmArch()) - .replace("${GRAALVM_ARGS}", graalVmBuildArgs) .replace("${CLASS_NAME}", mainClass) ); } else if (line.contains("PORT")) { @@ -194,6 +200,26 @@ private void processDockerfile(File dockerfile) throws IOException { } } + String argsFile = mavenProject.getProperties().getProperty(ARGS_FILE_PROPERTY_NAME); + if (argsFile == null) { + Path targetPath = Paths.get(mavenProject.getBuild().getDirectory()); + try (Stream listStream = Files.list(targetPath)) { + Path argsFilePath = listStream + .map(path -> path.getFileName().toString()) + .filter(f -> f.startsWith("native-image") && f.endsWith("args")) + .map(targetPath::resolve) + .findFirst() + .orElse(null); + if (argsFilePath != null) { + argsFile = argsFilePath.toAbsolutePath().toString(); + } + } + } + if (argsFile != null) { + List allNativeImageBuildArgs = MojoUtils.computeNativeImageArgs(nativeImageBuildArgs, baseImageRun, argsFile); + getLog().info("GraalVM native image build args: " + allNativeImageBuildArgs); + } + if (appArguments != null && !appArguments.isEmpty()) { getLog().info("Using application arguments: " + appArguments); result.add(getCmd()); diff --git a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/MojoUtils.java b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/MojoUtils.java index 023ca4de0..935860bb6 100644 --- a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/MojoUtils.java +++ b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/MojoUtils.java @@ -21,6 +21,14 @@ import org.codehaus.plexus.util.Os; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +import static io.micronaut.maven.AbstractDockerMojo.MOSTLY_STATIC_NATIVE_IMAGE_GRAALVM_FLAG; /** * Utility methods for different mojos. @@ -49,4 +57,40 @@ public static String findJavaExecutable(ToolchainManager toolchainManager, Maven } return executable; } + + public static List computeNativeImageArgs(List nativeImageBuildArgs, String baseImageRun, String argsFile) throws IOException { + List allNativeImageBuildArgs = new ArrayList<>(); + if (nativeImageBuildArgs != null && !nativeImageBuildArgs.isEmpty()) { + allNativeImageBuildArgs.addAll(nativeImageBuildArgs); + } + if (baseImageRun.contains("distroless") && !allNativeImageBuildArgs.contains(MOSTLY_STATIC_NATIVE_IMAGE_GRAALVM_FLAG)) { + allNativeImageBuildArgs.add(MOSTLY_STATIC_NATIVE_IMAGE_GRAALVM_FLAG); + } + + Path argsFilePath = Paths.get(argsFile); + if (Files.exists(argsFilePath)) { + List args = Files.readAllLines(argsFilePath); + int cpPosition = args.indexOf("-cp"); + args.remove(cpPosition); + args.remove(cpPosition); + + List newArgs = args.stream() + .filter(arg -> !arg.startsWith("-H:Name")) + .filter(arg -> !arg.startsWith("-H:Class")) + .filter(arg -> !arg.startsWith("-H:Path")) + .filter(arg -> !arg.startsWith("-H:ConfigurationFileDirectories")) + .map(arg -> { + if (arg.startsWith("\\Q") && arg.endsWith("\\E")) { + return "\\Q/home/app/libs" + arg.substring(arg.lastIndexOf("/")); + } else { + return arg; + } + }) + .toList(); + allNativeImageBuildArgs.addAll(newArgs); + } else { + throw new IOException("Unable to find args file: " + argsFilePath); + } + return allNativeImageBuildArgs; + } } diff --git a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/services/CompilerService.java b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/services/CompilerService.java index 748b65677..1f1740c47 100644 --- a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/services/CompilerService.java +++ b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/services/CompilerService.java @@ -19,8 +19,14 @@ import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.logging.Log; import org.apache.maven.plugin.logging.SystemStreamLog; -import org.apache.maven.project.*; -import org.apache.maven.shared.invoker.*; +import org.apache.maven.project.DefaultDependencyResolutionRequest; +import org.apache.maven.project.DependencyResolutionRequest; +import org.apache.maven.project.DependencyResolutionResult; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectDependenciesResolver; +import org.apache.maven.shared.invoker.InvocationResult; +import org.apache.maven.shared.invoker.Invoker; +import org.apache.maven.shared.invoker.MavenInvocationException; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.graph.DependencyFilter; @@ -30,7 +36,11 @@ import javax.inject.Singleton; import java.io.File; import java.nio.file.Path; -import java.util.*; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import java.util.stream.Collectors; @@ -68,14 +78,14 @@ public class CompilerService { @SuppressWarnings("MnInjectionPoints") @Inject public CompilerService(MavenProject mavenProject, MavenSession mavenSession, ExecutorService executorService, - ProjectDependenciesResolver resolver) { + ProjectDependenciesResolver resolver, Invoker invoker) { this.resolver = resolver; this.log = new SystemStreamLog(); this.mavenProject = mavenProject; this.mavenSession = mavenSession; this.executorService = executorService; this.sourceDirectories = resolveSourceDirectories(); - this.invoker = new DefaultInvoker(); + this.invoker = invoker; } /** @@ -194,11 +204,6 @@ public String buildClasspath(List dependencies) { * @return the invocation result. */ public InvocationResult packageProject() throws MavenInvocationException { - InvocationRequest request = new DefaultInvocationRequest(); - request.setPomFile(mavenProject.getFile()); - request.setGoals(Collections.singletonList(MAVEN_JAR_PLUGIN + ":jar")); - request.setBatchMode(true); - request.setQuiet(true); - return invoker.execute(request); + return executorService.invokeGoal(MAVEN_JAR_PLUGIN, "jar"); } } diff --git a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/services/ExecutorService.java b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/services/ExecutorService.java index 58470a215..307043ac2 100644 --- a/micronaut-maven-plugin/src/main/java/io/micronaut/maven/services/ExecutorService.java +++ b/micronaut-maven-plugin/src/main/java/io/micronaut/maven/services/ExecutorService.java @@ -21,11 +21,17 @@ import org.apache.maven.plugin.BuildPluginManager; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.invoker.DefaultInvocationRequest; +import org.apache.maven.shared.invoker.InvocationRequest; +import org.apache.maven.shared.invoker.InvocationResult; +import org.apache.maven.shared.invoker.Invoker; +import org.apache.maven.shared.invoker.MavenInvocationException; import org.codehaus.plexus.util.xml.Xpp3Dom; import org.twdata.maven.mojoexecutor.MojoExecutor; import javax.inject.Inject; import javax.inject.Singleton; +import java.util.Collections; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; @@ -42,12 +48,17 @@ public class ExecutorService { private final MojoExecutor.ExecutionEnvironment executionEnvironment; private final MavenProject mavenProject; + private final MavenSession mavenSession; + private final Invoker invoker; @SuppressWarnings("CdiInjectionPointsInspection") @Inject - public ExecutorService(MavenProject mavenProject, MavenSession mavenSession, BuildPluginManager pluginManager) { + public ExecutorService(MavenProject mavenProject, MavenSession mavenSession, BuildPluginManager pluginManager, + Invoker invoker) { this.executionEnvironment = executionEnvironment(mavenProject, mavenSession, pluginManager); this.mavenProject = mavenProject; + this.mavenSession = mavenSession; + this.invoker = invoker; } /** @@ -99,4 +110,21 @@ public void executeGoal(String pluginGroup, String pluginArtifact, String plugin final Plugin plugin = plugin(pluginGroup, pluginArtifact, pluginVersion); executeMojo(plugin, goal(goal), configuration, executionEnvironment); } + + /** + * Executes a goal using the Maven shared invoker. + * @param pluginKey The plugin coordinates in the format groupId:artifactId + * @param goal The goal to execute + * @return The result of the invocation + * @throws MavenInvocationException If the goal execution fails + */ + public InvocationResult invokeGoal(String pluginKey, String goal) throws MavenInvocationException { + InvocationRequest request = new DefaultInvocationRequest(); + request.setPomFile(mavenProject.getFile()); + request.setUserSettingsFile(mavenSession.getRequest().getUserSettingsFile()); + request.setGoals(Collections.singletonList(pluginKey + ":" + goal)); + request.setBatchMode(true); + request.setQuiet(true); + return invoker.execute(request); + } } diff --git a/micronaut-maven-plugin/src/main/resources/META-INF/plexus/components.xml b/micronaut-maven-plugin/src/main/resources/META-INF/plexus/components.xml index a9756425a..c151ce65c 100644 --- a/micronaut-maven-plugin/src/main/resources/META-INF/plexus/components.xml +++ b/micronaut-maven-plugin/src/main/resources/META-INF/plexus/components.xml @@ -161,6 +161,9 @@ default + + org.graalvm.buildtools:native-maven-plugin:add-reachability-metadata + org.apache.maven.plugins:maven-resources-plugin:resources @@ -169,7 +172,8 @@ ${project.groupId}:${project.artifactId}:${project.version}:aot-analysis, - ${project.groupId}:${project.artifactId}:${project.version}:graalvm-resources + ${project.groupId}:${project.artifactId}:${project.version}:graalvm-resources, + org.graalvm.buildtools:native-maven-plugin:write-args-file ${project.groupId}:${project.artifactId}:${project.version}:docker-native diff --git a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileAwsCustomRuntime b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileAwsCustomRuntime index 1d3ee72bf..2c6e72305 100644 --- a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileAwsCustomRuntime +++ b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileAwsCustomRuntime @@ -13,10 +13,10 @@ ENV PATH=/usr/lib/graalvm/bin:${PATH} WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ -ARG GRAALVM_ARGS="" +COPY *.args /home/app/graalvm-native-image.args ARG CLASS_NAME ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image ${GRAALVM_ARGS} -H:Class=${CLASS_NAME} -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args -H:Class=${CLASS_NAME} -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM amazonlinux:latest WORKDIR /function diff --git a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNative b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNative index 716d2c3dd..561ffba2c 100644 --- a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNative +++ b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNative @@ -5,13 +5,13 @@ WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ARG CLASS_NAME -ARG GRAALVM_ARGS="" ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image ${GRAALVM_ARGS} -H:Class=${CLASS_NAME} -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args -H:Class=${CLASS_NAME} -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM ${BASE_IMAGE_RUN} -ARG EXTRA_CMD +ARG EXTRA_CMD="" RUN if [[ -n "${EXTRA_CMD}" ]] ; then eval ${EXTRA_CMD} ; fi COPY --from=builder /home/app/application /app/application diff --git a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeDistroless b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeDistroless index 06dde1837..deb3ff0cb 100644 --- a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeDistroless +++ b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeDistroless @@ -5,10 +5,10 @@ WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ARG CLASS_NAME -ARG GRAALVM_ARGS="" ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image ${GRAALVM_ARGS} -H:Class=${CLASS_NAME} -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args -H:Class=${CLASS_NAME} -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM ${BASE_IMAGE_RUN} COPY --from=builder /home/app/application /app/application diff --git a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeOracleCloud b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeOracleCloud index 2fff6a387..8c74d054b 100644 --- a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeOracleCloud +++ b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeOracleCloud @@ -5,9 +5,9 @@ WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ -ARG GRAALVM_ARGS="" +COPY *.args /home/app/graalvm-native-image.args ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image ${GRAALVM_ARGS} --report-unsupported-elements-at-runtime -H:Class=com.fnproject.fn.runtime.EntryPoint -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args --report-unsupported-elements-at-runtime -H:Class=com.fnproject.fn.runtime.EntryPoint -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM fnproject/fn-java-fdk:jre17-latest AS fnfdk diff --git a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeStatic b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeStatic index 361d6cb2f..9833b1ec8 100644 --- a/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeStatic +++ b/micronaut-maven-plugin/src/main/resources/dockerfiles/DockerfileNativeStatic @@ -20,10 +20,10 @@ RUN curl -L -o zlib.tar.gz https://zlib.net/zlib-1.2.12.tar.gz && \ WORKDIR /home/app COPY classes /home/app/classes COPY dependency/* /home/app/libs/ +COPY *.args /home/app/graalvm-native-image.args ARG CLASS_NAME -ARG GRAALVM_ARGS="" ENV USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM=false -RUN native-image ${GRAALVM_ARGS} --static --libc=musl -H:Class=${CLASS_NAME} -H:Name=application --no-fallback -cp "/home/app/libs/*:/home/app/classes/" +RUN native-image @/home/app/graalvm-native-image.args --static --libc=musl -H:Class=${CLASS_NAME} -H:Name=application -cp "/home/app/libs/*:/home/app/classes/" FROM scratch COPY --from=builder /home/app/application /app/application diff --git a/pom.xml b/pom.xml index 00151bc7e..c446833d8 100644 --- a/pom.xml +++ b/pom.xml @@ -74,7 +74,7 @@ 17 3.9.0 4.0.0-SNAPSHOT - 0.9.20 + 0.9.21-SNAPSHOT 2.0.0-SNAPSHOT 2.0.0-SNAPSHOT @@ -107,6 +107,17 @@ false + + graalvm-native-build-tools-snapshots + GraalVM native-build-tools Snapshots + https://raw.githubusercontent.com/graalvm/native-build-tools/snapshots + + true + + + false + +