From 2ccd2b0d2843e27e41aa6804c677a1f0aab868d7 Mon Sep 17 00:00:00 2001 From: Antoine Date: Sun, 6 Sep 2020 18:01:11 +0200 Subject: [PATCH] end graalvm development without undertow and without spring boot dev tool --- Dockerfile | 7 +- Makefile | 1 + pom.xml | 46 +++--- .../native-image/native-image.properties | 8 -- .../wiki-project/native-image.properties | 8 ++ .../wiki-project}/reflect-config.json | 2 + trace.md | 133 ------------------ 7 files changed, 42 insertions(+), 163 deletions(-) delete mode 100644 src/main/resources/META-INF/native-image/native-image.properties create mode 100644 src/main/resources/META-INF/native-image/tk.antoine-roux/wiki-project/native-image.properties rename src/main/resources/META-INF/native-image/{ => tk.antoine-roux/wiki-project}/reflect-config.json (99%) delete mode 100644 trace.md diff --git a/Dockerfile b/Dockerfile index b531e2a..2132845 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,13 +16,14 @@ ADD src/ /build/src/ ADD Makefile /build # download dependencies and compile into layer -RUN ./mvnw -Pgraal compile +RUN ./mvnw -Pgraal,-no-graal compile # generate graalvm image into another layer -RUN ./mvnw -Pgraal package +RUN ./mvnw -Pgraal,-no-graal package #FROM debian:buster FROM scratch -COPY --from=builder /build/target/wikiProject /wikiproject +COPY --from=builder /build/target/wiki-project /wikiproject +#COPY --from=builder /build/target/wiki-project-1.0-SNAPSHOT.jar /wiki-project-1.0-SNAPSHOT.jar COPY --from=builder /tmp /tmp ENTRYPOINT ["/wikiproject"] diff --git a/Makefile b/Makefile index cd3f555..15014fc 100644 --- a/Makefile +++ b/Makefile @@ -26,4 +26,5 @@ docker-graal-build: docker-graal-run: RUN_PORT=8080 docker-graal-run: + echo "$(firstword $(MAKECMDGOALS))" docker run --rm -p 8080:$(RUN_PORT) docker.registry:5000/wikiproject-native --server.port=$(RUN_PORT) diff --git a/pom.xml b/pom.xml index d56e315..eaa06e6 100644 --- a/pom.xml +++ b/pom.xml @@ -11,10 +11,10 @@ 2.3.2.RELEASE - fr.antoine-roux - wikiProject + tk.antoine-roux + wiki-project ${revision} - wikiProject + wiki-project project use wikipedia streaming api https://stream.wikimedia.org/?doc#/Streams/get_v2_stream_test @@ -42,23 +42,17 @@ org.springframework.boot spring-boot-starter-web - - - - - - + - - - - - - - - - - + @@ -113,6 +107,20 @@ + + no-graal + + true + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + graal diff --git a/src/main/resources/META-INF/native-image/native-image.properties b/src/main/resources/META-INF/native-image/native-image.properties deleted file mode 100644 index 3264d5e..0000000 --- a/src/main/resources/META-INF/native-image/native-image.properties +++ /dev/null @@ -1,8 +0,0 @@ -Args=\ - -Dspring.native.mode=feature \ - -Dspring.native.verbose=true \ - -Dspring.native.dump-config=/tmp/computed-reflect-config.json \ - -Dspring.native.remove-unused-autoconfig=true - -# -H:ReflectionConfigurationResources=${.}/reflect-config.json -# -Dspring.graal.skip-logback=true diff --git a/src/main/resources/META-INF/native-image/tk.antoine-roux/wiki-project/native-image.properties b/src/main/resources/META-INF/native-image/tk.antoine-roux/wiki-project/native-image.properties new file mode 100644 index 0000000..6fe574e --- /dev/null +++ b/src/main/resources/META-INF/native-image/tk.antoine-roux/wiki-project/native-image.properties @@ -0,0 +1,8 @@ +Arg=\ + --native-image-info \ + -H:ReflectionConfigurationFiles=/build/target/classes/META-INF/native-image/tk.antoine-roux/wiki-project/reflection-config.json \ + -Dspring.native.mode=feature \ + -Dspring.native.verbose=false \ + -Dspring.native.dump-config=/tmp/computed-reflect-config.json \ + -Dspring.native.remove-unused-autoconfig=true \ + -Dspring.graal.skip-logback=false diff --git a/src/main/resources/META-INF/native-image/reflect-config.json b/src/main/resources/META-INF/native-image/tk.antoine-roux/wiki-project/reflect-config.json similarity index 99% rename from src/main/resources/META-INF/native-image/reflect-config.json rename to src/main/resources/META-INF/native-image/tk.antoine-roux/wiki-project/reflect-config.json index a1407ea..bfe8fcc 100644 --- a/src/main/resources/META-INF/native-image/reflect-config.json +++ b/src/main/resources/META-INF/native-image/tk.antoine-roux/wiki-project/reflect-config.json @@ -10,3 +10,5 @@ "allDeclaredMethods": true } ] + + diff --git a/trace.md b/trace.md deleted file mode 100644 index 53b59d4..0000000 --- a/trace.md +++ /dev/null @@ -1,133 +0,0 @@ - ____ _ _____ _ - / ___| _ __ _ __(_)_ __ __ _ | ___|__ __ _| |_ _ _ _ __ ___ - \___ \| '_ \| '__| | '_ \ / _` | | |_ / _ \/ _` | __| | | | '__/ _ \ - ___) | |_) | | | | | | | (_| | | _| __/ (_| | |_| |_| | | | __/ - |____/| .__/|_| |_|_| |_|\__, | |_| \___|\__,_|\__|\__,_|_| \___| - |_| |___/ - - Feature operating in FEATURE mode - Removing unused configurations - Use -Dspring.native.verbose=true on native-image call to see more detailed information from the feature - [wikiProject:91] (cap): 741.54 ms, 1.18 GB - WARNING: Could not resolve org.springframework.boot.loader.LaunchedURLClassLoader for reflection configuration. - Found #6 types in static reflection list to register - Skipping #6 types not on the classpath - Attempting proxy registration of #16 proxies - Skipped registration of #9 proxies - relevant types not on classpath - [wikiProject:91] setup: 2,324.54 ms, 1.18 GB - Registering resources - #35 patterns - Registering resources - #2 bundles - Processing META-INF/spring.factories files... - spring.factories processing, problem adding access for key org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer: javax/validation/ValidationException - Processing spring.factories - ApplicationListener lists #10 application listeners - Processing spring.factories - PropertySourceLoader lists #2 property source loaders - spring.factories processing, problem adding access for key org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer: org/springframework/jdbc/CannotGetJdbcConnectionException - Processing spring.factories - ApplicationListener lists #0 application listeners - Processing spring.factories - EnableAutoConfiguration lists #127 configurations - Excluding 102 auto-configurations from spring.factories file - WARNING: unable to trim META-INF/spring.factories (for example to disable unused auto configurations) because an existing resource-config is directly including it: /build/target/wikiProject-1.0-SNAPSHOT.jar!META-INF/native-image/resource-config.json - Processing spring.factories - ApplicationListener lists #1 application listeners - Processing existing META-INF/spring.components files... - Registered 1 entries - Configuring initialization time for specific types and packages: - #88 buildtime-init-classes #23 buildtime-init-packages #33 runtime-init-classes #1 runtime-init-packages - - Warning: class initialization of class org.springframework.boot.validation.MessageInterpolatorFactory failed with exception java.lang.NoClassDefFoundError: javax/validation/ValidationException. This class will be initialized at run time because option --allow-incomplete-classpath is used for image building. Use the option --initialize-at-run-time=org.springframework.boot.validation.MessageInterpolatorFactory to explicitly request delayed initialization of this class. - Number of types dynamically registered for reflective access: #2024 - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidationException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration. Reason: java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder. - WARNING: Could not register reflection metadata for org.springframework.web.multipart.commons.CommonsMultipartResolver. Reason: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory. - WARNING: Could not register reflection metadata for org.springframework.http.ReactiveHttpInputMessage. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Flux. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/json/bind/Jsonb. - WARNING: Could not register reflection metadata for org.springframework.http.server.reactive.HttpHandler. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Mono. - WARNING: Could not register reflection metadata for org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidationException. - WARNING: Could not register reflection metadata for org.springframework.web.multipart.commons.CommonsMultipartResolver. Reason: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration. Reason: java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder. - WARNING: Could not register reflection metadata for org.springframework.http.ReactiveHttpInputMessage. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Flux. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/json/bind/Jsonb. - WARNING: Could not register reflection metadata for org.springframework.http.server.reactive.HttpHandler. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Mono. - WARNING: Could not register reflection metadata for org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidationException. - WARNING: Could not register reflection metadata for org.springframework.web.multipart.commons.CommonsMultipartResolver. Reason: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration. Reason: java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder. - WARNING: Could not register reflection metadata for org.springframework.http.ReactiveHttpInputMessage. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Flux. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/json/bind/Jsonb. - WARNING: Could not register reflection metadata for org.springframework.http.server.reactive.HttpHandler. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Mono. - Warning: class initialization of class org.springframework.boot.validation.MessageInterpolatorFactory failed with exception java.lang.NoClassDefFoundError: javax/validation/ValidationException. This class will be initialized at run time because option --allow-incomplete-classpath is used for image building. Use the option --initialize-at-run-time=org.springframework.boot.validation.MessageInterpolatorFactory to explicitly request delayed initialization of this class. - Number of types dynamically registered for reflective access: #2024 - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidationException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration. Reason: java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder. - WARNING: Could not register reflection metadata for org.springframework.web.multipart.commons.CommonsMultipartResolver. Reason: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory. - WARNING: Could not register reflection metadata for org.springframework.http.ReactiveHttpInputMessage. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Flux. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/json/bind/Jsonb. - WARNING: Could not register reflection metadata for org.springframework.http.server.reactive.HttpHandler. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Mono. - WARNING: Could not register reflection metadata for org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidationException. - WARNING: Could not register reflection metadata for org.springframework.web.multipart.commons.CommonsMultipartResolver. Reason: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration. Reason: java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder. - WARNING: Could not register reflection metadata for org.springframework.http.ReactiveHttpInputMessage. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Flux. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/json/bind/Jsonb. - WARNING: Could not register reflection metadata for org.springframework.http.server.reactive.HttpHandler. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Mono. - WARNING: Could not register reflection metadata for org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidationException. - WARNING: Could not register reflection metadata for org.springframework.web.multipart.commons.CommonsMultipartResolver. Reason: java.lang.NoClassDefFoundError: org/apache/commons/fiWARNING: Could not register reflection metadata for org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidationException. - WARNING: Could not register reflection metadata for org.springframework.web.multipart.commons.CommonsMultipartResolver. Reason: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration. Reason: java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder. - WARNING: Could not register reflection metadata for org.springframework.http.ReactiveHttpInputMessage. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Flux. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/json/bind/Jsonb. - WARNING: Could not register reflection metadata for org.springframework.http.server.reactive.HttpHandler. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Mono. - WARNING: Could not register reflection metadata for org.springframework.boot.diagnostics.analyzer.ValidationExceptionFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidationException. - WARNING: Could not register reflection metadata for org.springframework.web.multipart.commons.CommonsMultipartResolver. Reason: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration. Reason: java.lang.NoClassDefFoundError: com/google/gson/GsonBuilder. - WARNING: Could not register reflection metadata for org.springframework.http.ReactiveHttpInputMessage. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Flux. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer. Reason: java.lang.NoClassDefFoundError: org/springframework/jdbc/CannotGetJdbcConnectionException. - WARNING: Could not register reflection metadata for org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration. Reason: java.lang.NoClassDefFoundError: javax/json/bind/Jsonb. - WARNING: Could not register reflection metadata for org.springframework.http.server.reactive.HttpHandler. Reason: java.lang.NoClassDefFoundError: reactor/core/publisher/Mono. - [wikiProject:91] (clinit): 6,528.65 ms, 2.67 GB - [wikiProject:91] (typeflow): 331,780.47 ms, 2.67 GB - [wikiProject:91] (objects): 128,127.89 ms, 2.67 GB - [wikiProject:91] (features): 8,933.99 ms, 2.67 GB - [wikiProject:91] analysis: 485,228.58 ms, 2.67 GB - [wikiProject:91] universe: 17,923.31 ms, 2.67 GB - [wikiProject:91] (parse): 10,750.64 ms, 2.13 GB - [wikiProject:91] (inline): 11,753.82 ms, 2.67 GB - [wikiProject:91] (compile): 56,270.16 ms, 2.71 GB - [wikiProject:91] compile: 81,957.83 ms, 2.71 GB - [wikiProject:91] image: 9,000.77 ms, 2.48 GB - [wikiProject:91] write: 1,158.10 ms, 2.48 GB - [wikiProject:91] [total]: 605,656.30 ms, 2.48 GB - [INFO] - [INFO] --- spring-boot-maven-plugin:2.3.2.RELEASE:repackage (repackage) @ wikiProject --- - [INFO] Replacing main artifact with repackaged archive - [INFO] ------------------------------------------------------------------------ - [INFO] BUILD SUCCESS - [INFO] ------------------------------------------------------------------------ - [INFO] Total time: 10:40 min - [INFO] Finished at: 2020-08-17T22:31:28Z - [INFO] ------------------------------------------------------------------------ - Removing intermediate container a8338a0f8da1 - ---> 8102c76cc125 - Step 12/14 : FROM debian:buster - buster: Pulling from library/debian - d6ff36c9ec48: Pull complete - Digest: sha256:1e74c92df240634a39d050a5e23fb18f45df30846bb222f543414da180b47a5d - Status: Downloaded newer image for debian:buster - ---> ee11c54e6bb7 - Step 13/14 : COPY --from=builder /build/target/wikiProject /wikiproject - ---> a214080a74d7 - Step 14/14 : ENTRYPOINT ["/wikiproject"] - ---> Running in ae1caf05bf0b - Removing intermediate container ae1caf05bf0b - ---> 163f952c5bba - Successfully built 163f952c5bba - Successfully tagged docker.registry:5000/wikiproject-native:latest