!7 sS defaultJavaTarget = "1.11"; sS standardCredentials() { ret ""; } // public snippets only // (transpilation md5, snippetID) => jar file //static new SerializeComputations computations; // transpilation md5 => jar file static new SerializeComputations computations; html { // lock lock; // now using SerializeComputations uri = dropPrefixSlash(uri); S snippetID = fsI(uri); if (!isSnippetPublic(snippetID)) fail("Snippet not public: " + snippetID); S transpiledSrc = getServerTranspiled2(snippetID); // md5 check (if parameter supplied) S md5 = params.get('md5); S srcMD5 = md5(transpiledSrc); if (md5 != null && !eq(md5, srcMD5)) ret "md5 mismatch"; bool forceCompilation = eq(params.get("forceCompilation"), "1"); File jar = computations.get(srcMD5/*, snippetID)*/, -> { remutable transpiledSrc; new CompilerBot2 bot; bot.forceCompilation = forceCompilation; ret bot.compileSnippet(snippetID); }); bool forceRepackage = eq("1", params.get("repackage")); bool withLibs = eq("1", params.get("withLibs")); bool noCompiler = eq("1", params.get("noCompiler")); bool withX30 = eq("1", params.get("withX30")); bool noSrc = eq("1", params.get("noSrc")); bool dynamicObjectOnly = eq("dynamicObjectOnly", params.get("mode")); S fileNameForBrowser = or2(params.get("filename"), psI(snippetID) + ".jar"); File jar2 = jar; if (withLibs) jar2 = appendToBaseFileName(jar2, ".with-libs"); if (noCompiler) jar2 = appendToBaseFileName(jar2, ".no-compiler"); if (dynamicObjectOnly) jar2 = appendToBaseFileName(jar2, ".dynamicObjectOnly"); if (noSrc) jar2 = appendToBaseFileName(jar2, ".noSrc"); if (!eq(jar, jar2)) { if (fileLength(jar2) <= 22 || forceRepackage) { temp var jarOut = zipOutputStream(jar2); new Set entries; text2zip(jarOut, "source.txt", f2s(jar2)); bool withSrc = !noSrc; zip2zip_collectFiles(jar, jarOut, entries, name -> withSrc || !endsWith(name, ".java")); if (withLibs) { Pair srcAndLibs = extractLibsFromTranspilation(transpiledSrc); fOr (S libID : srcAndLibs.b) { File fixer = compilerBotDestDir("fixer" + psI(libID) + ".jar"); if (fileExists(fixer)) { println("APPLYING FIXER: " + fixer); zip2zip_collectFiles(fixer, jarOut, entries); } zip2zip_collectFiles(loadLibraryOrSrcLib(libID), jarOut, entries); /*if (withSrc && isSrcLib(libID)) text2zip(jarOut, "lib" + libID + ".java", getServerTranspiledWithoutLibs(libID)); // TODO: use actual package and main class */ } } if (withX30) zip2zip_collectFiles(pathToJavaxJar(), jarOut, entries); else if (noCompiler) zip2zip_collectFiles(pathToJavaxJar(), jarOut, entries, name -> ! startsWithOneOf(name, "org/eclipse/", "META-INF/")); else if (dynamicObjectOnly) zip2zip_collectFiles(pathToJavaxJar(), jarOut, entries, name -> contains(name, "DynamicObject")); } jar = jar2; } print("Serving jar for " + snippetID + ": " + renderFileInfo(jar)); ret subBot_serveFileWithName(jar, fileNameForBrowser, "application/java-archive"); }