in src/main/java/org/apache/sling/feature/maven/mojos/ApisJarMojo.java [1836:1937]
private File createArchive(
final ApisJarContext ctx,
final ApiRegion apiRegion,
final ArtifactType archiveType,
final List<File> resources,
final Collection<ArtifactInfo> infos,
final List<Map.Entry<String, File>> additionalResources,
final List<String> report)
throws MojoExecutionException {
final JarArchiver jarArchiver = new JarArchiver();
if (archiveType == ArtifactType.APIS || archiveType == ArtifactType.SOURCES) {
// api or source
this.addFileSets(apiRegion, archiveType, infos, jarArchiver, null);
} else {
// javadoc or javadoc_all
final DefaultFileSet fileSet = new DefaultFileSet(ctx.getJavadocDir());
jarArchiver.addFileSet(fileSet);
}
// add included resources
this.addResources(infos, resources, jarArchiver, null);
if (additionalResources != null) {
for (final Map.Entry<String, File> s : additionalResources) {
getLog().debug("Adding resource " + s.getKey());
jarArchiver.addFile(s.getValue(), s.getKey());
}
}
// check for license report
if (ctx.getConfig().getLicenseReport() != null) {
final File out = this.createLicenseReport(ctx, apiRegion, infos, report);
jarArchiver.addFile(out, ctx.getConfig().getLicenseReport());
}
final ArtifactId targetId = this.buildArtifactId(ctx, apiRegion, archiveType);
final String artifactName = ctx.getConfig().getApiName() != null
? ctx.getConfig().getApiName()
: String.format("%s-%s", targetId.getArtifactId(), targetId.getClassifier());
MavenArchiveConfiguration archiveConfiguration = new MavenArchiveConfiguration();
archiveConfiguration.setAddMavenDescriptor(false);
if (archiveType == ArtifactType.APIS) {
// APIs need OSGi Manifest entry
String symbolicName = artifactName.replace('-', '.');
archiveConfiguration.addManifestEntry("Export-Package", getApiExportClauses(apiRegion, infos));
archiveConfiguration.addManifestEntry("Bundle-Description", project.getDescription());
archiveConfiguration.addManifestEntry(
"Bundle-Version", targetId.getOSGiVersion().toString());
archiveConfiguration.addManifestEntry("Bundle-ManifestVersion", "2");
archiveConfiguration.addManifestEntry("Bundle-SymbolicName", symbolicName);
archiveConfiguration.addManifestEntry("Bundle-Name", artifactName);
final Set<String> nodeTypes = new HashSet<>();
for (final ArtifactInfo info : infos) {
nodeTypes.addAll(info.getNodeTypes());
}
if (!nodeTypes.isEmpty()) {
archiveConfiguration.addManifestEntry("Sling-Nodetypes", String.join(",", nodeTypes));
}
if (project.getOrganization() != null) {
archiveConfiguration.addManifestEntry(
"Bundle-Vendor", project.getOrganization().getName());
}
// add provide capability headers to make dependent bundle resolvable with the apis-jar
archiveConfiguration.addManifestEntry(
Constants.PROVIDE_CAPABILITY, getApiProvideCapabilityClauses(apiRegion.getName(), infos));
archiveConfiguration.addManifestEntry(
"Require-Capability",
"osgi.unresolvable;filter:=\"(&(must.not.resolve=*)(!(must.not.resolve=*)))\",osgi.ee;filter:=\"(&(osgi.ee=JavaSE/compact2)(version=1.8))\"");
}
archiveConfiguration.addManifestEntry("Implementation-Version", targetId.getVersion());
archiveConfiguration.addManifestEntry("Specification-Version", targetId.getVersion());
archiveConfiguration.addManifestEntry("Implementation-Title", artifactName);
archiveConfiguration.addManifestEntry("Specification-Title", artifactName);
if (project.getOrganization() != null) {
archiveConfiguration.addManifestEntry(
"Implementation-Vendor", project.getOrganization().getName());
archiveConfiguration.addManifestEntry(
"Specification-Vendor", project.getOrganization().getName());
}
// replace/add manifest entries with the one provided in manifestProperties configuration
archiveConfiguration.addManifestEntries(ctx.getConfig().getManifestEntries());
final File target = new File(mainOutputDir, targetId.toMvnName());
MavenArchiver archiver = new MavenArchiver();
archiver.setArchiver(jarArchiver);
archiver.setOutputFile(target);
try {
archiver.createArchive(mavenSession, project, archiveConfiguration);
if (this.attachApiJars) {
projectHelper.attachArtifact(project, targetId.getType(), targetId.getClassifier(), target);
}
} catch (Exception e) {
throw new MojoExecutionException("An error occurred while creating APIs " + target + " archive", e);
}
return target;
}