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

未關閉
#12,897 0 則留言 0 個 reaction 已指派 1 人 在 GitHub 檢視

維護者通常 1 天內回覆

@Dhriti07 已經在處理了。

開始於 2026年8月25日。

評估

這個 Issue 還沒有評估資料。

描述

api: storage

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:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-nio</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-storage</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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 <optional>true</optional>. Consumers already have it on the classpath at compile scope via their GCS integration. This avoids the transitive scope conflict without a new artifact.

主要語言
Java
星號
2.1k
分支
1.2k
平均合併
2 天 14 小時
30 天內合併 PR
192

環境準備

  • 沒有 Dockerfile 或 Docker Compose 檔案
  • 沒有 Pull Request 範本
  • 閱讀貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

googleapis/google-cloud-java 的其他 Issue

查看 googleapis/google-cloud-java 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。