Skip to content

Native Image Build Fails after upgrading dd-trace-java from 1.40.0 to 1.41.0 #8011

@abdelmoez-guetat

Description

@abdelmoez-guetat

Description

I am attempting to build a native image for my Spring Boot application using GraalVM, but I am encountering initialization issues related to classes during the build time. These issues have arisen after upgrading Datadog's Java APM agent from version 1.40.0 to 1.41.0.

When building the native image, I receive the following error messages:

Classes that should be initialized at runtime were initialized during image building:
- datadog.trace.api.Functions$PrefixJoin was unintentionally initialized at build time. To investigate further, use --trace-class-initialization=datadog.trace.api.Functions$PrefixJoin.
- datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator was unintentionally initialized at build time. To investigate further, use --trace-class-initialization=datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator.
- datadog.trace.bootstrap.instrumentation.decorator.AsyncResultDecorator was unintentionally initialized at build time. To investigate further, use --trace-class-initialization=datadog.trace.bootstrap.instrumentation.decorator.AsyncResultDecorator.

The setup details are as follows:
Java Version: 17
Spring Boot Version: 3.3.5
GraalVM Version: 17.0.11

Maven Plugin Configuration:

I am using Maven to build the project, and the following is my plugin configuration in the pom.xml file:

            <plugin>
                <groupId>org.graalvm.buildtools</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <configuration>
                    <buildArgs>
                        <buildArg>-J-javaagent:dd-java-agent.jar</buildArg>
                        <buildArg>
                            --initialize-at-build-time=org.slf4j.helpers,datadog.okhttp3.internal.platform,net.logstash.logback
                        </buildArg>
                        <buildArg>--initialize-at-run-time=net.logstash.logback.appender.LogstashTcpSocketAppender
                        </buildArg>
                        <buildArg>--link-at-build-time=net.logstash.logback.appender</buildArg>
                        <buildArg>-H:+ReportExceptionStackTraces</buildArg>
                        <buildArg>-H:+MultiThreaded</buildArg>
                        <buildArg>-H:IncludeResources=.*\.xml</buildArg>
                    </buildArgs>
                    <imageName>${build.finalName}</imageName>
                </configuration>
            </plugin>

Additional Errors:

Error: Classes that should be initialized at run time got initialized during image building:
 datadog.trace.bootstrap.instrumentation.decorator.AsyncResultDecorator was unintentionally initialized at build time. org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService caused initialization of this class with the following trace: 
        at datadog.trace.bootstrap.instrumentation.decorator.AsyncResultDecorator.<clinit>(AsyncResultDecorator.java:19)
        at datadog.trace.instrumentation.reactor.core.ReactorAsyncResultSupportExtension.<clinit>(ReactorAsyncResultSupportExtension.java:11)
        at reactor.core.publisher.MonoJust.<init>(MonoJust.java:36)
        at reactor.core.publisher.Mono.just(Mono.java:754)
        at org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService.<clinit>(HandshakeWebSocketService.java:72)

datadog.trace.api.Functions$PrefixJoin was unintentionally initialized at build time. org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService caused initialization of this class with the following trace: 
        at datadog.trace.api.Functions$PrefixJoin.<clinit>(Functions.java:102)
        at datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator.<clinit>(BaseDecorator.java:37)
        at datadog.trace.instrumentation.reactor.core.ReactorAsyncResultSupportExtension.<clinit>(ReactorAsyncResultSupportExtension.java:11)
        at reactor.core.publisher.MonoJust.<init>(MonoJust.java:36)
        at reactor.core.publisher.Mono.just(Mono.java:754)
        at org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService.<clinit>(HandshakeWebSocketService.java:72)

datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator was unintentionally initialized at build time. org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService caused initialization of this class with the following trace: 
        at datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator.<clinit>(BaseDecorator.java:23)
        at datadog.trace.instrumentation.reactor.core.ReactorAsyncResultSupportExtension.<clinit>(ReactorAsyncResultSupportExtension.java:11)
        at reactor.core.publisher.MonoJust.<init>(MonoJust.java:36)
        at reactor.core.publisher.Mono.just(Mono.java:754)
        at org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService.<clinit>(HandshakeWebSocketService.java:72)


com.oracle.svm.core.util.UserError$UserException: Classes that should be initialized at run time got initialized during image building:
 datadog.trace.bootstrap.instrumentation.decorator.AsyncResultDecorator was unintentionally initialized at build time. org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService caused initialization of this class with the following trace: 
        at datadog.trace.bootstrap.instrumentation.decorator.AsyncResultDecorator.<clinit>(AsyncResultDecorator.java:19)
        at datadog.trace.instrumentation.reactor.core.ReactorAsyncResultSupportExtension.<clinit>(ReactorAsyncResultSupportExtension.java:11)
        at reactor.core.publisher.MonoJust.<init>(MonoJust.java:36)
        at reactor.core.publisher.Mono.just(Mono.java:754)
        at org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService.<clinit>(HandshakeWebSocketService.java:72)

datadog.trace.api.Functions$PrefixJoin was unintentionally initialized at build time. org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService caused initialization of this class with the following trace: 
        at datadog.trace.api.Functions$PrefixJoin.<clinit>(Functions.java:102)
        at datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator.<clinit>(BaseDecorator.java:37)
        at datadog.trace.instrumentation.reactor.core.ReactorAsyncResultSupportExtension.<clinit>(ReactorAsyncResultSupportExtension.java:11)
        at reactor.core.publisher.MonoJust.<init>(MonoJust.java:36)
        at reactor.core.publisher.Mono.just(Mono.java:754)
        at org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService.<clinit>(HandshakeWebSocketService.java:72)

datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator was unintentionally initialized at build time. org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService caused initialization of this class with the following trace: 
        at datadog.trace.bootstrap.instrumentation.decorator.BaseDecorator.<clinit>(BaseDecorator.java:23)
        at datadog.trace.instrumentation.reactor.core.ReactorAsyncResultSupportExtension.<clinit>(ReactorAsyncResultSupportExtension.java:11)
        at reactor.core.publisher.MonoJust.<init>(MonoJust.java:36)
        at reactor.core.publisher.Mono.just(Mono.java:754)
        at org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService.<clinit>(HandshakeWebSocketService.java:72)

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions