private File createArchive()

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;
    }