docs: protected Manifest createSREManifest() throws MojoExecutionException, MojoFailureException {
  		final Manifest manifest = new Manifest();
  
  		final String mainClass = getMainClass();
  		if (mainClass.isEmpty()) {
  			throw new MojoFailureException("the main class of the SRE is missed"); //$NON-NLS-1$
  		}
  
  		ManifestUpdater updater = getManifestUpdater();
  		if (updater == null) {
  			updater = new ManifestUpdater() {
  
  				@Override
  				public void addSREAttribute(String name, String value) {
  					assert name != null && !name.isEmpty();
  					if (value != null && !value.isEmpty()) {
  						getLog().debug("Adding to SRE manifest: " + name + " = " + value);  //$NON-NLS-1$//$NON-NLS-2$
  						final Map<String, Attributes> entries = manifest.getEntries();
  						Attributes attrs = entries.get(SREConstants.MANIFEST_SECTION_SRE);
  						if (attrs == null) {
  							attrs = new Attributes();
  							entries.put(SREConstants.MANIFEST_SECTION_SRE, attrs);
  						}
  						attrs.put(new Attributes.Name(name), value);
  					}
  				}
  
  				@Override
  				public void addMainAttribute(String name, String value) {
  					assert name != null && !name.isEmpty();
  					if (value != null && !value.isEmpty()) {
  						getLog().debug("Adding to SRE manifest: " + name + " = " + value);  //$NON-NLS-1$//$NON-NLS-2$
  						manifest.getMainAttributes().put(new Attributes.Name(name), value);
  					}
  				}
  
  			};
  		}
  
  		buildManifest(updater, mainClass);
  
  		return manifest;
  	}