enhanced graalvm with only minimal work

This commit is contained in:
Antoine 2020-08-18 14:09:11 +02:00
parent 7bf586dabf
commit ee313e09bd
Signed by: antoine
GPG Key ID: 098FB66FC0475E70
8 changed files with 18 additions and 2711 deletions

View File

@ -21,8 +21,7 @@ RUN ./mvnw -Pgraal compile
# generate graalvm image into another layer
RUN ./mvnw -Pgraal package
FROM debian:buster
#FROM scratch
FROM scratch
COPY --from=builder /build/target/wikiProject /wikiproject
RUN chmod +x /wikiproject
COPY --from=builder /tmp /tmp
ENTRYPOINT ["/wikiproject"]

View File

@ -15,6 +15,7 @@ docker-build:
docker-run:
docker run --rm -d -p 8080:8080 docker.registry:5000/wikiproject:latest
# this java agent for instrospect java reflexion call is not mandatory, instead spring boot maven plugin do all stuff for us
docker-graal-introspect: RUN_PORT=8080
docker-graal-introspect:
docker build -f ./Dockerfile-agent -t docker.registry:5000/wikiproject-native-introspect .
@ -25,4 +26,4 @@ docker-graal-build:
docker-graal-run: RUN_PORT=8080
docker-graal-run:
docker run -d --rm -p 8080:$(RUN_PORT) docker.registry:5000/wikiproject-native --server.port=$(RUN_PORT)
docker run --rm -p 8080:$(RUN_PORT) docker.registry:5000/wikiproject-native --server.port=$(RUN_PORT)

View File

@ -73,3 +73,10 @@ Caused by: java.lang.ClassNotFoundException: org.springframework.boot.devtools.l
... 7 more
make: *** [Makefile:22: docker-graal-run] Error 1
```
## during compile
```
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
```

27
pom.xml
View File

@ -135,20 +135,6 @@
<artifactId>native-image-maven-plugin</artifactId>
<version>${native-image-maven-plugin.version}</version>
<configuration>
<!--
&#45;&#45;initialize-at-run-time=org.springframework.data.r2dbc.connectionfactory.ConnectionFactoryUtils
&#45;&#45;initialize-at-build-time=io.r2dbc.spi.IsolationLevel,io.r2dbc.spi
&#45;&#45;initialize-at-build-time=io.r2dbc.spi.ConstantPool,io.r2dbc.spi.Assert,io.r2dbc.spi.ValidationDepth
&#45;&#45;initialize-at-build-time=org.springframework.data.r2dbc.connectionfactory
&#45;&#45;initialize-at-build-time=org.reactivestreams.Publisher
&#45;&#45;initialize-at-build-time=com.example.reactive.ReservationRepository
&#45;&#45;initialize-at-run-time=io.netty.channel.unix.Socket
&#45;&#45;initialize-at-run-time=io.netty.channel.unix.IovArray
&#45;&#45;initialize-at-run-time=io.netty.channel.epoll.EpollEventLoop
&#45;&#45;initialize-at-run-time=io.netty.channel.unix.Errors
-->
<buildArgs>
-Dspring.graal.mode=initialization-only
-Dspring.graal.dump-config=/tmp/computed-reflect-config.json
@ -161,18 +147,9 @@
--report-unsupported-elements-at-runtime
-H:+ReportExceptionStackTraces
--no-server
-J-Xmx3G
--initialize-at-build-time=org.springframework.boot.validation.MessageInterpolatorFactory
-J-Xmx3G --static
</buildArgs>
<!--
<buildArgs>-H:+TraceClassInitialization -H:+ReportExceptionStackTraces
-Dspring.native.remove-unused-autoconfig=true
-Dspring.native.remove-yaml-support=true
&#45;&#45;no-server -J-Xmx3G -J${enable-preview.jvmFlag}
&#45;&#45;no-fallback
&#45;&#45;static
</buildArgs>
-->
<imageName>${project.artifactId}</imageName>
</configuration>
<executions>

View File

@ -1,15 +0,0 @@
[
{
"name":"java.lang.ClassLoader",
"methods":[
{"name":"getPlatformClassLoader","parameterTypes":[] },
{"name":"loadClass","parameterTypes":["java.lang.String"] }
]
},
{
"name":"java.lang.ClassNotFoundException"
},
{
"name":"java.lang.NoSuchMethodError"
}
]

View File

@ -1,7 +0,0 @@
[
["java.lang.reflect.ParameterizedType","org.springframework.core.SerializableTypeWrapper$SerializableTypeProxy","java.io.Serializable"],
["java.lang.reflect.TypeVariable","org.springframework.core.SerializableTypeWrapper$SerializableTypeProxy","java.io.Serializable"],
["java.lang.reflect.WildcardType","org.springframework.core.SerializableTypeWrapper$SerializableTypeProxy","java.io.Serializable"],
["org.springframework.boot.context.properties.ConfigurationProperties","org.springframework.core.annotation.SynthesizedAnnotation"],
["org.springframework.web.bind.annotation.RequestMapping","org.springframework.core.annotation.SynthesizedAnnotation"]
]

File diff suppressed because it is too large Load Diff

View File

@ -1,155 +0,0 @@
{
"resources":[
{"pattern":"\\QMETA-INF/spring-autoconfigure-metadata.properties\\E"},
{"pattern":"\\QMETA-INF/spring.factories\\E"},
{"pattern":"\\Qapplication.properties\\E"},
{"pattern":"\\Qorg/apache/catalina/core/RestrictedFilters.properties\\E"},
{"pattern":"\\Qorg/apache/catalina/core/RestrictedListeners.properties\\E"},
{"pattern":"\\Qorg/apache/catalina/core/RestrictedServlets.properties\\E"},
{"pattern":"\\Qorg/apache/catalina/loader/JdbcLeakPrevention.class\\E"},
{"pattern":"\\Qorg/apache/catalina/util/CharsetMapperDefault.properties\\E"},
{"pattern":"\\Qorg/apache/catalina/util/ServerInfo.properties\\E"},
{"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"},
{"pattern":"\\Qorg/springframework/beans/factory/Aware.class\\E"},
{"pattern":"\\Qorg/springframework/beans/factory/BeanFactoryAware.class\\E"},
{"pattern":"\\Qorg/springframework/beans/factory/config/BeanFactoryPostProcessor.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/AbstractDependsOnBeanFactoryPostProcessor.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/AutoConfigureAfter.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/AutoConfigureBefore.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/AutoConfigureOrder.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/admin/SpringApplicationAdminJmxAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/aop/AopAutoConfiguration$AspectJAutoProxyingConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/aop/AopAutoConfiguration$ClassProxyingConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/aop/AopAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/availability/ApplicationAvailabilityAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/cache/CacheAutoConfiguration$CacheConfigurationImportSelector.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/cache/CacheAutoConfiguration$CacheManagerEntityManagerFactoryDependsOnPostProcessor.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/cache/CacheAutoConfiguration$CacheManagerValidator.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/cache/CacheAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/cache/GenericCacheConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/cache/NoOpCacheConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/cache/SimpleCacheConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/condition/ConditionalOnBean.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/condition/ConditionalOnClass.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/condition/ConditionalOnMissingBean.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/condition/ConditionalOnMissingClass.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/condition/ConditionalOnProperty.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/condition/ConditionalOnWebApplication.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/context/ConfigurationPropertiesAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/context/LifecycleAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/context/MessageSourceAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/context/PropertyPlaceholderAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/data/jpa/EntityManagerFactoryDependsOnPostProcessor.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/GsonHttpMessageConvertersConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/HttpMessageConvertersAutoConfiguration$NotReactiveWebApplicationCondition$ReactiveWebApplication.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/HttpMessageConvertersAutoConfiguration$NotReactiveWebApplicationCondition.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/HttpMessageConvertersAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/JacksonHttpMessageConvertersConfiguration$MappingJackson2XmlHttpMessageConverterConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/JacksonHttpMessageConvertersConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/http/JsonbHttpMessageConvertersConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/info/ProjectInfoAutoConfiguration$GitResourceAvailableCondition.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/info/ProjectInfoAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration$StandardJackson2ObjectMapperBuilderCustomizer.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$JacksonObjectMapperConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration$ParameterNamesModuleConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/jmx/JmxAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/task/TaskExecutionAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/task/TaskSchedulingAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/client/RestTemplateAutoConfiguration$NotReactiveWebApplicationCondition$ReactiveWebApplication.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/client/RestTemplateAutoConfiguration$NotReactiveWebApplicationCondition.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/client/RestTemplateAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/embedded/EmbeddedWebServerFactoryCustomizerAutoConfiguration$JettyWebServerFactoryCustomizerConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/embedded/EmbeddedWebServerFactoryCustomizerAutoConfiguration$NettyWebServerFactoryCustomizerConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/embedded/EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/embedded/EmbeddedWebServerFactoryCustomizerAutoConfiguration$UndertowWebServerFactoryCustomizerConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/embedded/EmbeddedWebServerFactoryCustomizerAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/DispatcherServletAutoConfiguration$DefaultDispatcherServletCondition.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/DispatcherServletAutoConfiguration$DispatcherServletConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/DispatcherServletAutoConfiguration$DispatcherServletRegistrationCondition.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/DispatcherServletAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/HttpEncodingAutoConfiguration$LocaleCharsetMappingsCustomizer.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/HttpEncodingAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/MultipartAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryAutoConfiguration$BeanPostProcessorsRegistrar.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryConfiguration$EmbeddedJetty.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryConfiguration$EmbeddedTomcat.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/ServletWebServerFactoryConfiguration$EmbeddedUndertow.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$OptionalPathExtensionContentNegotiationStrategy.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$ResourceChainCustomizerConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$ResourceChainResourceHandlerRegistrationCustomizer.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$ResourceHandlerRegistrationCustomizer.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$ErrorPageCustomizer.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$ErrorTemplateMissingCondition.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$PreserveErrorControllerTargetClassPostProcessor.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$StaticView.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/web/servlet/error/ErrorMvcAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/websocket/servlet/WebSocketServletAutoConfiguration$JettyWebSocketConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/websocket/servlet/WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/websocket/servlet/WebSocketServletAutoConfiguration$UndertowWebSocketConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/autoconfigure/websocket/servlet/WebSocketServletAutoConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/boot/context/properties/EnableConfigurationProperties.class\\E"},
{"pattern":"\\Qorg/springframework/boot/context/properties/EnableConfigurationPropertiesRegistrar.class\\E"},
{"pattern":"\\Qorg/springframework/context/ApplicationContextAware.class\\E"},
{"pattern":"\\Qorg/springframework/context/ResourceLoaderAware.class\\E"},
{"pattern":"\\Qorg/springframework/context/annotation/Conditional.class\\E"},
{"pattern":"\\Qorg/springframework/context/annotation/Configuration.class\\E"},
{"pattern":"\\Qorg/springframework/context/annotation/Import.class\\E"},
{"pattern":"\\Qorg/springframework/context/annotation/ImportBeanDefinitionRegistrar.class\\E"},
{"pattern":"\\Qorg/springframework/core/Ordered.class\\E"},
{"pattern":"\\Qorg/springframework/core/annotation/Order.class\\E"},
{"pattern":"\\Qorg/springframework/web/context/ServletContextAware.class\\E"},
{"pattern":"\\Qorg/springframework/web/servlet/DispatcherServlet.properties\\E"},
{"pattern":"\\Qorg/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class\\E"},
{"pattern":"\\Qorg/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport$NoOpValidator.class\\E"},
{"pattern":"\\Qorg/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.class\\E"},
{"pattern":"\\Qorg/springframework/web/servlet/config/annotation/WebMvcConfigurer.class\\E"},
{"pattern":"\\Qorg/springframework/web/util/HtmlCharacterEntityReferences.properties\\E"},
{"pattern":"\\Qtk/antoine_roux/wiki/\\E"}
],
"bundles":[
{"name":"org.apache.catalina.authenticator.LocalStrings"},
{"name":"org.apache.catalina.authenticator.jaspic.LocalStrings"},
{"name":"org.apache.catalina.connector.LocalStrings"},
{"name":"org.apache.catalina.core.LocalStrings"},
{"name":"org.apache.catalina.deploy.LocalStrings"},
{"name":"org.apache.catalina.loader.LocalStrings"},
{"name":"org.apache.catalina.mapper.LocalStrings"},
{"name":"org.apache.catalina.mbeans.LocalStrings"},
{"name":"org.apache.catalina.realm.LocalStrings"},
{"name":"org.apache.catalina.security.LocalStrings"},
{"name":"org.apache.catalina.servlets.LocalStrings"},
{"name":"org.apache.catalina.session.LocalStrings"},
{"name":"org.apache.catalina.startup.LocalStrings"},
{"name":"org.apache.catalina.util.LocalStrings"},
{"name":"org.apache.catalina.valves.LocalStrings"},
{"name":"org.apache.catalina.webresources.LocalStrings"},
{"name":"org.apache.coyote.LocalStrings"},
{"name":"org.apache.coyote.http11.LocalStrings"},
{"name":"org.apache.coyote.http11.filters.LocalStrings"},
{"name":"org.apache.naming.LocalStrings"},
{"name":"org.apache.tomcat.util.LocalStrings"},
{"name":"org.apache.tomcat.util.buf.LocalStrings"},
{"name":"org.apache.tomcat.util.compat.LocalStrings"},
{"name":"org.apache.tomcat.util.descriptor.web.LocalStrings"},
{"name":"org.apache.tomcat.util.http.LocalStrings"},
{"name":"org.apache.tomcat.util.http.parser.LocalStrings"},
{"name":"org.apache.tomcat.util.modeler.LocalStrings"},
{"name":"org.apache.tomcat.util.net.LocalStrings"},
{"name":"org.apache.tomcat.util.scan.LocalStrings"},
{"name":"org.apache.tomcat.util.threads.res.LocalStrings"},
{"name":"org.apache.tomcat.websocket.LocalStrings"},
{"name":"org.apache.tomcat.websocket.server.LocalStrings"}
]
}