diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassLoaderBase.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassLoaderBase.java index 00a0f8e08cf..0c470ad6848 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassLoaderBase.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassLoaderBase.java @@ -51,7 +51,6 @@ public class ClassLoaderBase extends URLClassLoader { * Creates a DynamicClassLoader that can load classes dynamically * from jar files under a specific folder. * - * @param conf the configuration for the cluster. * @param parent the parent ClassLoader to set. */ public ClassLoaderBase(final ClassLoader parent) { diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CoprocessorClassLoader.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CoprocessorClassLoader.java index 971f4eff859..c8ebae9ad0c 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CoprocessorClassLoader.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/CoprocessorClassLoader.java @@ -158,7 +158,7 @@ public class CoprocessorClassLoader extends ClassLoaderBase { Enumeration entries = jarFile.entries(); while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); - if (entry.getName().matches("/lib/[^/]+\\.jar")) { + if (entry.getName().matches("[/]?lib/[^/]+\\.jar")) { File file = new File(parentDir, "." + pathPrefix + "." + path.getName() + "." + System.currentTimeMillis() + "." + entry.getName().substring(5)); IOUtils.copyBytes(jarFile.getInputStream(entry), new FileOutputStream(file), conf, true); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java index 2eb3300f54d..b6b92c35e84 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestClassLoading.java @@ -382,6 +382,15 @@ public class TestClassLoading { @Test public void testClassLoadingFromLibDirInJar() throws Exception { + loadingClassFromLibDirInJar("/lib/"); + } + + @Test + public void testClassLoadingFromRelativeLibDirInJar() throws Exception { + loadingClassFromLibDirInJar("lib/"); + } + + void loadingClassFromLibDirInJar(String libPrefix) throws Exception { FileSystem fs = cluster.getFileSystem(); File innerJarFile1 = buildCoprocessorJar(cpName1); @@ -397,7 +406,7 @@ public class TestClassLoading { for (File jarFile: new File[] { innerJarFile1, innerJarFile2 }) { // Add archive entry - JarEntry jarAdd = new JarEntry("/lib/" + jarFile.getName()); + JarEntry jarAdd = new JarEntry(libPrefix + jarFile.getName()); jarAdd.setTime(jarFile.lastModified()); out.putNextEntry(jarAdd);