in src/main/java/org/apache/sling/feature/karaf/KarafFeatureWriter.java [54:121]
public static void writeKAR(final OutputStream os,
final Feature feature,
final ArtifactManager artifactManager)
throws IOException {
// check for repoinit extension
final Extension repoinitExt = feature.getExtensions().getByName(FeatureConstants.EXTENSION_NAME_REPOINIT);
File configurationBundleFile = null;
Artifact configuratorBundle = null;
try {
final Configurations configs = new Configurations();
configs.addAll(feature.getConfigurations());
if ( repoinitExt != null ) {
final Configuration cfg = new Configuration("org.apache.sling.jcr.repoinit.RepositoryInitializer",
"feature-" + feature.getId().getArtifactId());
cfg.getProperties().put("scripts", repoinitExt.getText());
configs.add(cfg);
}
if ( !configs.isEmpty() ) {
configurationBundleFile = Files.createTempFile(null, null).toFile();
try ( final FileOutputStream fos = new FileOutputStream(configurationBundleFile)) {
final Map<String, String> map;
if ( repoinitExt == null ) {
map = null;
} else {
map = Collections.singletonMap("Require-Capability", REQUIRE_REPOINIT_CAPABILITY);
}
ConfigurationUtil.createConfiguratorBundle(os,
configs,
feature.getId().getGroupId() + "." + feature.getId().getArtifactId(),
feature.getId().getOSGiVersion().toString(),
map);
configuratorBundle = new Artifact(new ArtifactId(feature.getId().getGroupId(),
feature.getId().getArtifactId(),
feature.getId().getVersion(), "configurator", null));
}
}
try ( final ZipOutputStream jos = new ZipOutputStream(os) ) {
// repository/features.xml
// repository/{maven-path-to-bundle}
final ZipEntry xmlEntry = new ZipEntry("repository/features.xml");
jos.putNextEntry(xmlEntry);
final Writer writer = new OutputStreamWriter(jos);
writeFeaturesXML(writer, feature, configuratorBundle);
writer.flush();
jos.closeEntry();
for(final Map.Entry<Integer, List<Artifact>> entry : feature.getBundles().getBundlesByStartOrder().entrySet()) {
for(final Artifact artifact : entry.getValue()) {
final ArtifactHandler handler = artifactManager.getArtifactHandler(artifact.getId().toMvnUrl());
addEntry(jos, artifact, handler.getFile());
}
}
if ( configuratorBundle != null ) {
addEntry(jos, configuratorBundle, configurationBundleFile);
}
}
} finally {
if ( configurationBundleFile != null ) {
configurationBundleFile.delete();
}
}
}