googleapis / googleapis/google-cloud-java

google-cloud-nio: transitive google-cloud-storage dependency causes scope conflicts when used at test scope

Aperta
#12,897 0 commenti 0 reazioni 1 assegnatario Rivendicata da @Dhriti07 Vedi su GitHub
api: storage
Lingua principale
Java
Stelle
2.1k
Fork
1.2k
Merge medio
1g 23h
PR unite (30g)
154

Descrizione

## Problem

`google-cloud-nio` is commonly used at `test` scope to provide a `java.nio.file.FileSystemProvider` for `gs://` URIs in tests. However, it depends on `google-cloud-storage` at compile scope, which pulls in ~15 transitive dependencies.

When a project already has `google-cloud-storage` at compile scope (e.g. via `spring-cloud-gcp-starter-storage`), adding `google-cloud-nio` at test scope can cause Maven's "nearest definition wins" rule to silently re-resolve `google-cloud-storage` and its transitives at test scope. Build tools that strip test-scoped jars from the runtime image (e.g. Jib) then produce containers with missing classes, causing `ClassNotFoundException` at startup.

The current workaround is to manually exclude `google-cloud-storage` from `google-cloud-nio`:

```xml

com.google.cloud
google-cloud-nio
test


com.google.cloud
google-cloud-storage

```

This is fragile and non-obvious. Every consumer hitting this has to independently discover the problem and apply the same fix.

## Suggestion

One of:

1. **Separate artifact:** publish a `google-cloud-nio-testing` artifact that contains only the `FileSystemProvider` registration and declares `google-cloud-storage` as `provided` or `optional`. This matches the pattern used by other GCP libraries (e.g. `google-cloud-bigtable-emulator-core`).

2. **Mark `google-cloud-storage` as `optional`:** in the existing `google-cloud-nio` POM, declare `google-cloud-storage` as `true`. Consumers already have it on the classpath at compile scope via their GCS integration. This avoids the transitive scope conflict without a new artifact.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.