最近,我将TrueZip tar升级到7.7.9版,将6个包添加到项目的类路径中: TrueZip -驱动程序-tar、truezip-驱动程序-tar、truezip-驱动程序-zip、truezip-file、truezip内核和truezip-swing,以及所有必要的依赖项(XZ1.5等)。
但是,当我试图在主方法中运行时,在编译过程中没有错误:
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中实例化。
引导是一个内部和静态的最终类http://grepcode.com/file/repo1.maven.org/maven2/de.schlichtherle.truezip/truezip-kernel/7.7.9/de/schlichtherle/truezip/socket/sl/IOPoolLocator.java#IOPoolLocator。
我发现了很少的参考资料,但不幸的是没有很大的帮助。
发布于 2015-08-20 12:33:36
我也有同样的问题,我想您是在分隔行中添加这些TrueZip类路径条目吧?
在本例中,我的解决方案是:将它们添加到一行中,其中以逗号“、"分隔路径
尝试深入调试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。现在,在主方法中执行一个测试:
aClassLoader.getResourceAsStream("/META-INF/services/de.schlichtherle.truezip.socket.spi.IOPoolService") 使用包含在6个jar文件中的不同类,您应该看到只有truezip-kernel.jar中的类才能找到IOPoolService,因为所有jar文件都由不同的加载程序加载(而不是同一个对象id)。
https://stackoverflow.com/questions/32107237
复制相似问题