private ZipFile extractDependency(ZipEntry zipEntry) throws IOException {
        File dependencyWorkDir = new File(workDir, "lib");
        if (!dependencyWorkDir.exists()) {
            dependencyWorkDir.mkdirs();
        }
        String depFileName = new File(zipEntry.getName()).getName();
        File depFile = new File(dependencyWorkDir, depFileName);
        if (!depFile.isFile()) {
            File tmpFile = File.createTempFile("lib", ".tmp", dependencyWorkDir);
            tmpFile.deleteOnExit();
            copyZipEntryToTmpFile(zipEntry, tmpFile);
            tmpFile.renameTo(depFile);
        }
        return new ZipFile(depFile);
    }
Extracts a dependency from the plugin artifact ZIP and saves it to the work
directory.  If the dependency has already been extracted (we're re-using the
work directory) then this simply returns what is already there.
@param zipEntry a ZIP file entry
@throws IOException if an I/O error has occurred
common/plugin/src/main/java/io/apiman/common/plugin/PluginClassLoader.java