sclass ProgramPackager { File jarFile; S mainProgramID; S mainClassName; Set excludeSnippets; *(File *jarFile, S *mainProgramID, S *mainClassName) {} *(File *jarFile, S *mainProgramID) { assertNotNull("Please set mainClassName in " + mainProgramID, mainClassName = tok_mainClassNameFromJavaXSnippet(mainProgramID)); } Set snippetIDs; Map> trace; void go ctex { Pair programJarAndSrc = CompilerBot.compileSnippet2(mainProgramID); if (snippetIDs == null) { temp IProgressShower p = tempProgressBar("Collecting dependencies", 100); trace = new Map; snippetIDs = recursivelyCollectSnippetIDsFromTranspiled( mainProgramID, trace_out := minimalNotifyingMap(trace, r { p.setValue(l(trace)); }), exclude := excludeSnippets); } temp IProgressShower p = tempProgressBar("JAR", or_nonZeroLong(fileSize(jarFile), megabytes(30))); { temp ZipOutputStream jar = zipOutputStream(jarFile); temp tempShowFileSizeProgress(p, jarFile); makeManifestWithMainClass(jar, mainClassName); zip2zip_exceptManifest(programJarAndSrc.a, jar); zip_addTextFile(jar, "back-references.txt", renderMap_colon_lines(reverseMultiMap_tree(pseudoToRealMultiMap(trace)).data)); SS titles = getSnippetTitles_cached(snippetIDs); zip_addTextFile(jar, "snippet-titles.struct", struct(titles)); new TreeMap types; for (S snippetID : snippetIDs) { continue if isPseudoSnippetID(snippetID); int type = getSnippetType(snippetID); types.put(snippetID, type); if (type == snippetType_image()) { File img = loadLibrary(snippetID); addFileToZip(jar, img, psI(snippetID) + "." + (isGIF(img) ? "gif" : "png")); } else if (type == snippetType_data()) addFileToZip(jar, loadLibrary(snippetID), psI(snippetID) + ".bin"); else pcall { S text = loadSnippet(snippetID); if (text != null) zip_addTextFile(jar, psI(snippetID) + ".text", text); if (isJavaxCompilableSnippetTypeExceptInclude(type)) zip_addTextFile(jar, psI(snippetID) + ".transpiled", getServerTranspiled2(snippetID)); } } zip_addTextFile(jar, "snippet-types.struct", struct(types)); File javaxJar = pathToJavaxJar(); print("Copying: " + javaxJar); zip2zip_exceptManifest2(javaxJar, jar, litset("transpilationDate")); file2zip(jar, programFile("gazelle-concepts.zip")); } // jar close makeExecutable(jarFile); fileSavedInfoBox(jarFile); } }