gpt4 book ai didi

java - 在使用 gradle 构建的 ShadowJar 中使用 truezip

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:00 30 4
gpt4 key购买 nike

我有一个用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 包含所有必需的类,但也许缺少某些内容?

我怎么知道缺少哪个类、哪个包?还有什么可能导致这种情况?

在 Eclipse 中运行它可以工作...

感谢您的帮助。

最佳答案

这是创建 uber-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 - 如果您还没有这样做的话。

关于java - 在使用 gradle 构建的 ShadowJar 中使用 truezip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32080211/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com