我有一个用gradle编译的shadowJar,它使用truezip从zip文件中获取一些文件。
我使用它获得此异常:
Exception in thread "main" java.util.ServiceConfigurationError: file (Unknown file system scheme! May be the class path doesn't contain the respective driver module or it isn't set up correctly?)
at de.schlichtherle.truezip.fs.FsAbstractCompositeDriver.newController(FsAbstractCompositeDriver.java:33)
at de.schlichtherle.truezip.fs.FsDefaultManager.getController0(FsDefaultManager.java:95)
at de.schlichtherle.truezip.fs.FsDefaultManager.getController(FsDefaultManager.java:78)
at de.schlichtherle.truezip.file.TBIO.getInputSocket(TBIO.java:280)
at de.schlichtherle.truezip.file.TFileInputStream.newInputStream(TFileInputStream.java:101)
at de.schlichtherle.truezip.file.TFileInputStream.<init>(TFileInputStream.java:95)
我设置了一个这样的archiveDetector:
final TArchiveDetector ad = new TArchiveDetector("foo", new ZipDriver(IOPoolLocator.SINGLETON));
TConfig.get().setArchiveDetector(ad);
当我想创建这样的输入流时抛出异常:
final TFileInputStream is = new TFileInputStream(thefile);
据我所知,shadowJar包含所有必需的类,但也许缺少某些东西?
我怎么知道哪个类,哪个包丢失了? 还有什么可能导致这个?
从日食中运行它......
感谢您的帮助。
答案 0 :(得分:0)
创建超级JAR时这是一个常见问题:META-INF/services/*
的各个条目需要追加。但是,默认情况下,许多工具在创建uber-JAR时只需覆盖它们。因此,ServiceLoader
类无法找到所有必需的插件(例如,对于文件系统驱动程序),这是此异常所抱怨的内容。
因此,您需要修复创建uber-JAR的工具的配置。如果您将Maven与maven-shade-plugin
一起使用,则只需添加ServicesResourceTransformer
- 请参阅https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#ServicesResourceTransformer。
另一种选择是根本不使用uber-JAR,这是使用Maven时的默认设置。
Eclipse可以读取Maven项目并从中建立元数据,所以也许您可以考虑将项目转换为使用Maven - 如果您还没有。
答案 1 :(得分:0)
我有同样的问题。经过一番研究,我发现了以下解决方案:
在build.gradle中添加以下内容:
shadowJar {
mergeServiceFiles()
}