in src/main/java/org/apache/nifi/NarMojo.java [1040:1116]
public File createArchive() throws MojoExecutionException {
final File outputDirectory = projectBuildDirectory;
File narFile = getNarFile(outputDirectory, finalName, classifier);
MavenArchiver archiver = new MavenArchiver();
archiver.setCreatedBy("Apache NiFi Nar Maven Plugin", "org.apache.nifi", "nifi-nar-maven-plugin");
archiver.setArchiver(jarArchiver);
archiver.setOutputFile(narFile);
Date timestamp = archiver.configureReproducible(outputTimestamp); // configure for Reproducible Builds based on outputTimestamp value
archive.setForced(forceCreation);
try {
File contentDirectory = getClassesDirectory();
if (contentDirectory.exists()) {
archiver.getArchiver().addDirectory(contentDirectory, getIncludes(), getExcludes());
} else {
getLog().warn("NAR will be empty - no content was marked for inclusion!");
}
File extensionDocsFile = getExtensionsDocumentationFile();
if (extensionDocsFile.exists()) {
archiver.getArchiver().addFile(extensionDocsFile, "META-INF/docs/" + extensionDocsFile.getName());
} else {
getLog().warn("NAR will not contain any Extensions' documentation - no META-INF/" + extensionDocsFile.getName() + " file found!");
}
File additionalDetailsDirectory = new File(getExtensionsDocumentationFile().getParentFile(), "additional-details");
if (additionalDetailsDirectory.exists()) {
archiver.getArchiver().addDirectory(additionalDetailsDirectory, "META-INF/docs/additional-details/");
}
File existingManifest = defaultManifestFile;
if (useDefaultManifestFile && existingManifest.exists() && archive.getManifestFile() == null) {
getLog().info("Adding existing MANIFEST to archive. Found under: " + existingManifest.getPath());
archive.setManifestFile(existingManifest);
}
// automatically add the artifact id, group id, and version to the manifest
archive.addManifestEntry("Nar-Id", narId);
archive.addManifestEntry("Nar-Group", narGroup);
archive.addManifestEntry("Nar-Version", narVersion);
// look for a nar dependency
NarDependency narDependency = getNarDependency();
if (narDependency != null) {
final String narDependencyGroup = notEmpty(this.narDependencyGroup) ? this.narDependencyGroup : narDependency.getGroupId();
final String narDependencyId = notEmpty(this.narDependencyId) ? this.narDependencyId : narDependency.getArtifactId();
final String narDependencyVersion = notEmpty(this.narDependencyVersion) ? this.narDependencyVersion : narDependency.getVersion();
archive.addManifestEntry("Nar-Dependency-Group", narDependencyGroup);
archive.addManifestEntry("Nar-Dependency-Id", narDependencyId);
archive.addManifestEntry("Nar-Dependency-Version", narDependencyVersion);
}
// add build information when available
if (notEmpty(buildTag)) {
archive.addManifestEntry("Build-Tag", buildTag);
}
if (notEmpty(buildBranch)) {
archive.addManifestEntry("Build-Branch", buildBranch);
}
if (notEmpty(buildRevision)) {
archive.addManifestEntry("Build-Revision", buildRevision);
}
SimpleDateFormat dateFormat = new SimpleDateFormat(BUILD_TIMESTAMP_FORMAT);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
archive.addManifestEntry("Build-Timestamp", dateFormat.format(timestamp == null ? new Date() : timestamp));
archive.addManifestEntry("Clone-During-Instance-Class-Loading", String.valueOf(cloneDuringInstanceClassLoading));
archiver.createArchive(session, project, archive);
return narFile;
} catch (ArchiverException | MojoExecutionException | ManifestException | IOException | DependencyResolutionRequiredException e) {
throw new MojoExecutionException("Error assembling NAR", e);
}
}