code: public synchronized void createJarFile() throws IOException {
  
  		// Temporary buffer for the stream copy
  		final byte[] buf = new byte[128];
  
  		// Check if output file is valid
  		if (this.outputFile == null) {
  			throw new IOException("Output file is null");
  		}
  
  		// If output file already exists, delete it
  		if (this.outputFile.exists()) {
  			this.outputFile.delete();
  		}
  
  		final JarOutputStream jos = new JarOutputStream(new FileOutputStream(this.outputFile), new Manifest());
  		final Iterator<Class<?>> it = this.classSet.iterator();
  		while (it.hasNext()) {
  
  			final Class<?> clazz = it.next();
  			final String entry = clazz.getName().replace('.', '/') + CLASS_EXTENSION;
  
  			jos.putNextEntry(new JarEntry(entry));
  
  			final InputStream classInputStream = clazz.getResourceAsStream(clazz.getSimpleName() + CLASS_EXTENSION);
  
  			int num = classInputStream.read(buf);
  			while (num != -1) {
  				jos.write(buf, 0, num);
  				num = classInputStream.read(buf);
  			}
  
  			classInputStream.close();
  			jos.closeEntry();
  		}
  
  		jos.close();
  	}
docs: Creates a jar file which contains the previously added class. The content of the jar file is written to
  <code>outputFile</code> which has been provided to the constructor. If <code>outputFile</code> already exists, it
  is overwritten by this operation.
  
  @throws IOException
  thrown if an error occurs while writing to the output file