code: 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();
  
              InputStream input = null;
              OutputStream output = null;
              try {
                  input = this.pluginArtifactZip.getInputStream(zipEntry);
                  output = new FileOutputStream(tmpFile);
                  IOUtils.copy(input, output);
                  output.flush();
                  tmpFile.renameTo(depFile);
              } catch (IOException e) {
                  throw e;
              } finally {
                  IOUtils.closeQuietly(input);
                  IOUtils.closeQuietly(output);
              }
          }
          return new ZipFile(depFile);
      }
docs: 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