private static Path findOrCreateJar(Class<?> my_class, FileSystem fs,
    Map<String, String> packagedClasses) throws IOException {
    // attempt to locate an existing jar for the class.
    String jar = findContainingJar(my_class, packagedClasses);
    if (null == jar || jar.isEmpty()) {
      jar = getJar(my_class);
      updateMap(jar, packagedClasses);
    }

    if (null == jar || jar.isEmpty()) {
      return null;
    }

    LOG.debug(String.format("For class %s, using jar %s", my_class.getName(), jar));
    return new Path(jar).makeQualified(fs.getUri(), fs.getWorkingDirectory());
  }
Finds the Jar for a class or creates it if it doesn't exist. If the class is in a directory in
the classpath, it creates a Jar on the fly with the contents of the directory and returns the
path to that Jar. If a Jar is created, it is created in the system temporary directory.
Otherwise, returns an existing jar that contains a class of the same name. Maintains a mapping
from jar contents to the tmp jar created.
@param my_class        the class to find.
@param fs              the FileSystem with which to qualify the returned path.
@param packagedClasses a map of class name to path.
@return a jar file that contains the class.
hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java