google-cloud-java
google-cloud-java copied to clipboard
Missing dependency on google-cloud-storage from google-cloud-nio
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?
Thank you for triage, @eaball35
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
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.