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