TrueZip class 无法实例化
TrueZip class could not be instantiated
有一个小程序运行与 TrueZip 6 配合得很好。最近我通过向项目的 class 路径添加 6 个包将 TrueZip jar 更新到版本 7.7.9:truezip-driver-file、truezip-driver-tar、truezip-driver-zip、truezip-file、truezip-kernel 和 truezip-swing 以及所有必要的依赖项(xz 1.5 等) .
编译过程中没有错误,但是,当我尝试在 main 方法中 运行 时:
TConfig.get().setArchiveDetector(
new TArchiveDetector(TArchiveDetector.NULL, new Object[][] {
{ "tar", new TarDriver(IOPoolLocator.SINGLETON) },
{ "tgz|tar.gz", new TarGZipDriver(IOPoolLocator.SINGLETON) },
{ "zip|alt|alib", new ZipDrive(IOPoolLocator.SINGLETON) } }));
显示de.schlichtherle.truezip.socket.sl.IOPoolLocator$Boot无法在IOPoolLocator中实例化
引导是一个内部的静态最终 class
http://grepcode.com/file/repo1.maven.org/maven2/de.schlichtherle.truezip/truezip-kernel/7.7.9/de/schlichtherle/truezip/socket/sl/IOPoolLocator.java#IOPoolLocator
我找到的参考资料很少,但不幸的是,帮助不大。
我遇到了同样的问题,我猜你是在分隔行中添加这些 TrueZip class路径条目吗?
在这种情况下,我的解决方案是:将它们添加到一行中,路径以逗号“,”分隔,
尝试深入并调试 class 在 JVM 中引导的第一个实例中的真正错误:
static final IOPool<?> pool;
static {
final Class<?> clazz = IOPoolLocator.class;
final Logger logger = Logger.getLogger(clazz.getName(), clazz.getName());
final ServiceLocator locator = new ServiceLocator(clazz.getClassLoader());
pool = decorate((IOPool) create(locator, logger), locator, logger);
}
你会看到最后它转到一行,这是后来异常的来源:
this.l1 = null != loader ? loader : ClassLoader.getSystemClassLoader();
基本上它是使用ServiceLoader 或ClassLoader。现在在main方法中进行测试:
aClassLoader.getResourceAsStream("/META-INF/services/de.schlichtherle.truezip.socket.spi.IOPoolService")
使用你的 6 个 jar 文件中包含的不同 classes,你应该看到只有 classes in truezip-kernel.jar 可以找到 IOPoolService,因为所有的 jar 文件都是由不同的加载程序加载(不同的对象 ID)。
有一个小程序运行与 TrueZip 6 配合得很好。最近我通过向项目的 class 路径添加 6 个包将 TrueZip jar 更新到版本 7.7.9:truezip-driver-file、truezip-driver-tar、truezip-driver-zip、truezip-file、truezip-kernel 和 truezip-swing 以及所有必要的依赖项(xz 1.5 等) .
编译过程中没有错误,但是,当我尝试在 main 方法中 运行 时:
TConfig.get().setArchiveDetector(
new TArchiveDetector(TArchiveDetector.NULL, new Object[][] {
{ "tar", new TarDriver(IOPoolLocator.SINGLETON) },
{ "tgz|tar.gz", new TarGZipDriver(IOPoolLocator.SINGLETON) },
{ "zip|alt|alib", new ZipDrive(IOPoolLocator.SINGLETON) } }));
显示de.schlichtherle.truezip.socket.sl.IOPoolLocator$Boot无法在IOPoolLocator中实例化
引导是一个内部的静态最终 class http://grepcode.com/file/repo1.maven.org/maven2/de.schlichtherle.truezip/truezip-kernel/7.7.9/de/schlichtherle/truezip/socket/sl/IOPoolLocator.java#IOPoolLocator
我找到的参考资料很少,但不幸的是,帮助不大。
我遇到了同样的问题,我猜你是在分隔行中添加这些 TrueZip class路径条目吗?
在这种情况下,我的解决方案是:将它们添加到一行中,路径以逗号“,”分隔,
尝试深入并调试 class 在 JVM 中引导的第一个实例中的真正错误:
static final IOPool<?> pool;
static {
final Class<?> clazz = IOPoolLocator.class;
final Logger logger = Logger.getLogger(clazz.getName(), clazz.getName());
final ServiceLocator locator = new ServiceLocator(clazz.getClassLoader());
pool = decorate((IOPool) create(locator, logger), locator, logger);
}
你会看到最后它转到一行,这是后来异常的来源:
this.l1 = null != loader ? loader : ClassLoader.getSystemClassLoader();
基本上它是使用ServiceLoader 或ClassLoader。现在在main方法中进行测试:
aClassLoader.getResourceAsStream("/META-INF/services/de.schlichtherle.truezip.socket.spi.IOPoolService")
使用你的 6 个 jar 文件中包含的不同 classes,你应该看到只有 classes in truezip-kernel.jar 可以找到 IOPoolService,因为所有的 jar 文件都是由不同的加载程序加载(不同的对象 ID)。