public int run()

in atomosfeaturelauncherconfig/src/main/java/org/apache/sling/feature/launcher/atomos/config/AtomosConfigLauncher.java [262:315]


    public int run(LauncherRunContext context, ClassLoader cl) throws Exception {
        int result = super.run(context, cl);
        if (result == FrameworkEvent.STOPPED) {
            File outputDir = new File(Paths.get("").toAbsolutePath().toFile(), "atomos-config");
            outputDir.mkdirs();

            try (JarOutputStream jarToBuild = getJarToBuild(new File(outputDir, "atomos.substrate.jar"), new File(outputDir, "app.substrate.jar"))) {
                try (Reader reader = new FileReader(new File(outputDir, "config-feature.slingosgifeature"), StandardCharsets.UTF_8)) {
                    Feature config = FeatureJSONReader.read(reader, null);
                    Feature assembled = FeatureBuilder.assemble(ArtifactId.parse("config:assembled:1.0.0"), new BuilderContext(new FeatureProvider() {
                        @Override
                        public Feature provide(ArtifactId id) {
                            return null;
                        }
                    }), m_app, config);
                    Extension assembledEx = assembled.getExtensions().getByName("atomos-config");
                    JsonObject nativeConfig = assembledEx.getJSONStructure().asJsonObject();
                    write(outputDir, jarToBuild, "reflect-config", nativeConfig);
                    write(outputDir, jarToBuild, "resource-config", nativeConfig);
                    write(outputDir, jarToBuild, "proxy-config", nativeConfig);
                    write(outputDir, jarToBuild, "jni-config", nativeConfig);
                    write(outputDir, jarToBuild, "serialization-config", nativeConfig);

                    try (FileOutputStream output = new FileOutputStream(new File(outputDir,  "atomos_init.sh"))) {
                        String script = "#!/bin/sh\n\nexport ATOMOS_CLASSPATH=\"";
                        if (nativeConfig.containsKey("classpath")) {
                            script += nativeConfig.getJsonArray("classpath").getValuesAs(JsonString.class).stream().map(JsonString::getString).collect(Collectors.joining(":"));

                            extractJarsAndCollect(nativeConfig, jarToBuild, outputDir);
                        }
                        script += "\"\n\nexport ATOMOS_INIT=\"";
                        if (nativeConfig.containsKey("initialize-at-build-time")) {
                            String iabt = "--initialize-at-build-time=" + nativeConfig.getJsonArray("initialize-at-build-time").getValuesAs(JsonString.class).stream().map(JsonString::getString).collect(Collectors.joining(","));
                            script += iabt;

                            // Add the initialize at build time to a native-image.properties file
                            addNativeImageProperties(jarToBuild, iabt);
                        }
                        script += "\"\n";
                        output.write(script.getBytes(StandardCharsets.UTF_8));
                    }

                    addFeatureToJar(jarToBuild);
                } catch (Throwable t) {
                    t.printStackTrace();
                    throw t;
                }
            }
        }

        /* */ System.out.println("*** Finished");
        System.exit(0);
        return result;
    }