88import io .opentelemetry .api .OpenTelemetry ;
99import io .opentelemetry .api .trace .Tracer ;
1010import io .opentelemetry .context .propagation .ContextPropagators ;
11- import io .opentelemetry .maven .semconv .MavenOtelSemanticAttributes ;
1211import io .opentelemetry .sdk .OpenTelemetrySdk ;
1312import io .opentelemetry .sdk .autoconfigure .AutoConfiguredOpenTelemetrySdk ;
14- import io .opentelemetry .sdk .autoconfigure .AutoConfiguredOpenTelemetrySdkBuilder ;
1513import io .opentelemetry .sdk .common .CompletableResultCode ;
16- import io .opentelemetry .sdk .resources .Resource ;
17- import io .opentelemetry .semconv .resource .attributes .ResourceAttributes ;
1814import java .util .Collections ;
15+ import java .util .Map ;
1916import java .util .concurrent .TimeUnit ;
2017import javax .annotation .Nullable ;
21- import org .apache .maven .rtinfo .RuntimeInformation ;
2218import org .codehaus .plexus .component .annotations .Component ;
23- import org .codehaus .plexus .component .annotations .Requirement ;
2419import org .codehaus .plexus .personality .plexus .lifecycle .phase .Disposable ;
2520import org .codehaus .plexus .personality .plexus .lifecycle .phase .Initializable ;
2621import org .slf4j .Logger ;
@@ -32,17 +27,16 @@ public final class OpenTelemetrySdkService implements Initializable, Disposable
3227
3328 private static final Logger logger = LoggerFactory .getLogger (OpenTelemetrySdkService .class );
3429
35- @ SuppressWarnings ("NullAway" ) // Injected automatically to non-null
36- @ Requirement
37- private RuntimeInformation runtimeInformation ;
38-
3930 private OpenTelemetry openTelemetry = OpenTelemetry .noop ();
4031 @ Nullable private OpenTelemetrySdk openTelemetrySdk ;
4132
4233 @ Nullable private Tracer tracer ;
4334
4435 private boolean mojosInstrumentationEnabled ;
4536
37+ /** Visible for testing */
38+ @ Nullable AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk ;
39+
4640 /**
4741 * Note: the JVM shutdown hook defined by the {@code
4842 * io.opentelemetry.sdk.autoconfigure.TracerProviderConfiguration} v1.7.0 does NOT cause
@@ -76,42 +70,28 @@ public synchronized void dispose() {
7670 }
7771 this .openTelemetry = OpenTelemetry .noop ();
7872
73+ this .autoConfiguredOpenTelemetrySdk = null ;
7974 logger .debug ("OpenTelemetry: OpenTelemetrySdkService disposed" );
8075 }
8176
8277 @ Override
8378 public void initialize () {
8479 logger .debug ("OpenTelemetry: initialize OpenTelemetrySdkService..." );
85- AutoConfiguredOpenTelemetrySdkBuilder autoConfiguredSdkBuilder =
86- AutoConfiguredOpenTelemetrySdk .builder ();
87-
88- // SDK CONFIGURATION PROPERTIES
89- autoConfiguredSdkBuilder .addPropertiesSupplier (
90- () -> {
91- // Change default of "otel.traces.exporter" from "otlp" to "none"
92- // The impacts are
93- // * If no otel exporter settings are passed, then the Maven extension will not export
94- // rather than exporting on OTLP GRPC to http://localhost:4317
95- // * If OTEL_EXPORTER_OTLP_ENDPOINT is defined but OTEL_TRACES_EXPORTER is not, then don't
96- // export
97- return Collections .singletonMap ("otel.traces.exporter" , "none" );
98- });
99-
100- // SDK RESOURCE
101- // Don't use the `io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider` framework because we
102- // need to get the `RuntimeInformation` component injected by Plexus
103- autoConfiguredSdkBuilder .addResourceCustomizer (
104- (resource , configProperties ) ->
105- Resource .builder ()
106- .put (
107- ResourceAttributes .SERVICE_NAME , MavenOtelSemanticAttributes .SERVICE_NAME_VALUE )
108- .put (ResourceAttributes .SERVICE_VERSION , runtimeInformation .getMavenVersion ())
109- .putAll (resource )
110- .build ());
111-
112- // BUILD SDK
113- AutoConfiguredOpenTelemetrySdk autoConfiguredOpenTelemetrySdk =
114- autoConfiguredSdkBuilder .build ();
80+
81+ // Change default of "otel.traces.exporter" from "otlp" to "none"
82+ // The impacts are
83+ // * If no otel exporter settings are passed, then the Maven extension will not export
84+ // rather than exporting on OTLP GRPC to http://localhost:4317
85+ // * If OTEL_EXPORTER_OTLP_ENDPOINT is defined but OTEL_TRACES_EXPORTER is not, then don't
86+ // export
87+ Map <String , String > properties = Collections .singletonMap ("otel.traces.exporter" , "none" );
88+
89+ this .autoConfiguredOpenTelemetrySdk =
90+ AutoConfiguredOpenTelemetrySdk .builder ()
91+ .setServiceClassLoader (getClass ().getClassLoader ())
92+ .addPropertiesSupplier (() -> properties )
93+ .build ();
94+
11595 if (logger .isDebugEnabled ()) {
11696 logger .debug (
11797 "OpenTelemetry: OpenTelemetry SDK initialized with "
0 commit comments