public static JarOutputStream write()

in src/main/java/org/apache/sling/feature/io/archive/ArchiveWriter.java [84:128]


    public static JarOutputStream write(final OutputStream out,
            final Manifest baseManifest,
            final ArtifactProvider provider, final Feature... features)
    throws IOException {
        // create manifest
        final Manifest manifest = (baseManifest == null ? new Manifest() : new Manifest(baseManifest));
        manifest.getMainAttributes().putValue("Manifest-Version", "1.0");
        manifest.getMainAttributes().putValue(VERSION_HEADER, String.valueOf(ARCHIVE_VERSION));
        manifest.getMainAttributes().putValue(CONTENTS_HEADER, String.join(",", Arrays.asList(features).stream()
                .map(feature -> feature.getId().toMvnId()).collect(Collectors.toList())));

        final Set<ArtifactId> artifacts = new HashSet<>();
        final byte[] buffer = new byte[1024*1024*256];

        // create archive
        final JarOutputStream jos = new JarOutputStream(out, manifest);

        // write everything without compression
        jos.setLevel(Deflater.NO_COMPRESSION);
        for (final Feature feature : features) {
            writeFeature(artifacts, feature, provider, jos, buffer);
        }



        for (final Feature feature : features) {
            for (final Artifact a : feature.getBundles()) {
                writeArtifact(artifacts, provider, a, jos, buffer);
            }

            for (final Extension e : feature.getExtensions()) {
                if (e.getType() == ExtensionType.ARTIFACTS) {
                    final boolean isFeature = Extension.EXTENSION_NAME_ASSEMBLED_FEATURES.equals(e.getName());
                    for (final Artifact a : e.getArtifacts()) {
                        if ( isFeature ) {
                            writeFeature(artifacts, provider, a.getId(), jos, buffer);
                        } else {
                            writeArtifact(artifacts, provider, a, jos, buffer);
                        }
                    }
                }
            }
        }
        return jos;
    }