google-cloud-java icon indicating copy to clipboard operation
google-cloud-java copied to clipboard

Missing dependency on google-cloud-storage from google-cloud-nio

Open heuermh opened this issue 3 years ago • 2 comments
trafficstars

It appears google-cloud-nio is missing a dependency on google-cloud-storage, at least when used in Maven runtime scope.

Steps to reproduce

pom.xml:

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>libraries-bom</artifactId>
        <version>25.2.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    ...
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-nio</artifactId>
      <scope>runtime</scope>
    </dependency>
    ...
  </dependencies>

throws NoClassDefFoundError at runtime

$ ./listFilesystems
Installed filesystem providers:
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
...
Caused by: java.util.ServiceConfigurationError: java.nio.file.spi.FileSystemProvider: Provider com.google.cloud.storage.contrib.nio.CloudStorageFileSystemProvider could not be instantiated
	at java.util.ServiceLoader.fail(ServiceLoader.java:232)
	at java.util.ServiceLoader.access$100(ServiceLoader.java:185)
	at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)
	at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
	at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
	at java.nio.file.spi.FileSystemProvider.loadInstalledProviders(FileSystemProvider.java:119)
	at java.nio.file.spi.FileSystemProvider.access$000(FileSystemProvider.java:77)
	at java.nio.file.spi.FileSystemProvider$1.run(FileSystemProvider.java:169)
	at java.nio.file.spi.FileSystemProvider$1.run(FileSystemProvider.java:166)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.nio.file.spi.FileSystemProvider.installedProviders(FileSystemProvider.java:166)
	... 6 more
Caused by: java.lang.NoClassDefFoundError: com/google/cloud/storage/StorageException
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
	at java.lang.Class.getConstructor0(Class.java:3075)
	at java.lang.Class.newInstance(Class.java:412)
	at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
	... 16 more
Caused by: java.lang.ClassNotFoundException: com.google.cloud.storage.StorageException
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	... 21 more

Adding an additional runtime dependency on google-cloud-storage fixes this error

pom.xml:

...
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-nio</artifactId>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>google-cloud-storage</artifactId>
      <scope>runtime</scope>
    </dependency>
$ ./listFilesystems
Installed filesystem providers:
  file	sun.nio.fs.MacOSXFileSystemProvider
  jar	com.sun.nio.zipfs.ZipFileSystemProvider
  gs	com.google.cloud.storage.contrib.nio.CloudStorageFileSystemProvider

Is this intentional?

heuermh avatar May 11 '22 20:05 heuermh

Thank you for triage, @eaball35

heuermh avatar May 13 '22 16:05 heuermh

We are seeing crashes in production due to this issue.

It seems this might already be fixed in the googleapis/java-storage-nio master branch: https://github.com/googleapis/java-storage-nio/commit/533c6dd510327bff310fbd6ddb2ceb72b2afcbce

Could we cut a release?

cc @BenWhitehead

danielnorberg avatar May 18 '22 13:05 danielnorberg

Any release of com.google.cloud:google-cloud-nio from v1.124.0 onward has the fix for this issue, along with any version of com.google.cloud:libraries-bom:25.4.0 onward.

BenWhitehead avatar Nov 14 '22 19:11 BenWhitehead