code: private URL extractResource(ZipEntry zipEntry) throws IOException {
          File resourceWorkDir = new File(workDir, "resources");
          if (!resourceWorkDir.exists()) {
              resourceWorkDir.mkdirs();
          }
          File resourceFile = new File(resourceWorkDir, zipEntry.getName());
          if (!resourceFile.isFile()) {
              resourceFile.getParentFile().mkdirs();
              File tmpFile = File.createTempFile("res", ".tmp", resourceWorkDir);
              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(resourceFile);
              } catch (IOException e) {
                  throw e;
              } finally {
                  IOUtils.closeQuietly(input);
                  IOUtils.closeQuietly(output);
              }
          }
          return resourceFile.toURI().toURL();
      }
docs: Extracts a resource from the plugin artifact ZIP and saves it to the work
  directory.  If the resource 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