code: public void run(IProgressMonitor monitor) {
  
      log.fine("Build jar");
      JarPackageData jarrer = new JarPackageData();
  
      jarrer.setExportJavaFiles(true);
      jarrer.setExportClassFiles(true);
      jarrer.setExportOutputFolders(true);
      jarrer.setOverwrite(true);
  
      try {
        // IJavaProject project =
        // (IJavaProject) resource.getProject().getNature(JavaCore.NATURE_ID);
  
        // check this is the case before letting this method get called
        Object element = resource.getAdapter(IJavaElement.class);
        IType type = ((ICompilationUnit) element).findPrimaryType();
        jarrer.setManifestMainClass(type);
  
        // Create a temporary JAR file name
        File baseDir = Activator.getDefault().getStateLocation().toFile();
  
        String prefix =
            String.format("%s_%s-", resource.getProject().getName(), resource
                .getName());
        File jarFile = File.createTempFile(prefix, ".jar", baseDir);
        jarrer.setJarLocation(new Path(jarFile.getAbsolutePath()));
  
        jarrer.setElements(resource.getProject().members(IResource.FILE));
        IJarExportRunnable runnable =
            jarrer.createJarExportRunnable(Display.getDefault()
                .getActiveShell());
        runnable.run(monitor);
  
        this.jarFile = jarFile;
  
      } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException(e);
      }
    }
docs: Creates a JAR file containing the given resource (Java class with
  main()) and all associated resources
  
  @param resource the resource
  @return a file designing the created package