X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=src%2Forg%2Fargeo%2Fbuild%2FMake.java;h=9ebbfd462f10c8f0052c065b0c19e871ba1cbdb8;hb=172f0707475dc7c1ad43a19d035e4b7db0f4905e;hp=8c9dadd64105823acc96f2c0bb8be61439c0134e;hpb=a0a60df874ab380a45619c738137a0080fd5fd4a;p=cc0%2Fargeo-build.git diff --git a/src/org/argeo/build/Make.java b/src/org/argeo/build/Make.java index 8c9dadd..9ebbfd4 100644 --- a/src/org/argeo/build/Make.java +++ b/src/org/argeo/build/Make.java @@ -3,7 +3,6 @@ package org.argeo.build; import static java.lang.System.Logger.Level.DEBUG; import static java.lang.System.Logger.Level.ERROR; import static java.lang.System.Logger.Level.INFO; -import static java.lang.System.Logger.Level.TRACE; import static java.lang.System.Logger.Level.WARNING; import java.io.File; @@ -397,18 +396,18 @@ public class Make { /** Package a single bundle. */ void createBundle(String branch, String bundle, String category) throws IOException { - final Path source; + final Path bundleSourceBase; if (!Files.exists(execDirectory.resolve(bundle))) { logger.log(WARNING, "Bundle " + bundle + " not found in " + execDirectory + ", assuming this is this directory."); - source = execDirectory; + bundleSourceBase = execDirectory; } else { - source = execDirectory.resolve(bundle); + bundleSourceBase = execDirectory.resolve(bundle); } - Path srcP = source.resolve("src"); + Path srcP = bundleSourceBase.resolve("src"); Path compiled = buildBase.resolve(bundle); - String bundleSymbolicName = source.getFileName().toString(); + String bundleSymbolicName = bundleSourceBase.getFileName().toString(); // Metadata Properties properties = new Properties(); @@ -425,7 +424,7 @@ public class Make { } } - Path bndBnd = source.resolve("bnd.bnd"); + Path bndBnd = bundleSourceBase.resolve("bnd.bnd"); if (Files.exists(bndBnd)) try (InputStream in = Files.newInputStream(bndBnd)) { properties.load(in); @@ -488,7 +487,7 @@ public class Make { }); // add resources - Files.walkFileTree(source, new SimpleFileVisitor() { + Files.walkFileTree(bundleSourceBase, new SimpleFileVisitor() { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { // skip output directory if it happens to be within the sources @@ -496,7 +495,7 @@ public class Make { return FileVisitResult.SKIP_SUBTREE; // skip excluded patterns - Path relativeP = source.relativize(dir); + Path relativeP = bundleSourceBase.relativize(dir); for (PathMatcher exclude : excludes) if (exclude.matches(relativeP)) return FileVisitResult.SKIP_SUBTREE; @@ -506,12 +505,12 @@ public class Make { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - Path relativeP = source.relativize(file); + Path relativeP = bundleSourceBase.relativize(file); for (PathMatcher exclude : excludes) if (exclude.matches(relativeP)) return FileVisitResult.CONTINUE; // skip JavaScript source maps - if (relativeP.getFileName().toString().endsWith(".map")) + if (sourceBundles && file.getFileName().toString().endsWith(".map")) return FileVisitResult.CONTINUE; JarEntry entry = new JarEntry(relativeP.toString()); @@ -554,7 +553,7 @@ public class Make { } // add legal notices and licenses - for (Path p : listLegalFilesToInclude(source).values()) { + for (Path p : listLegalFilesToInclude(bundleSourceBase).values()) { jarOut.putNextEntry(new JarEntry(p.getFileName().toString())); Files.copy(p, jarOut); } @@ -565,22 +564,49 @@ public class Make { : a2srcOutput.resolve(category); Files.createDirectories(a2srcJarDirectory); Path srcJarP = a2srcJarDirectory.resolve(compiled.getFileName() + "." + major + "." + minor + ".src.jar"); - Manifest srcManifest = new Manifest(); - srcManifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0"); - srcManifest.getMainAttributes().putValue("Bundle-SymbolicName", bundleSymbolicName + ".src"); - srcManifest.getMainAttributes().putValue("Bundle-Version", - manifest.getMainAttributes().getValue("Bundle-Version").toString()); + createSourceBundle(bundleSymbolicName, manifest, bundleSourceBase, srcP, srcJarP); + } + } + + /** Create a separate bundle containing the sources. */ + void createSourceBundle(String bundleSymbolicName, Manifest manifest, Path bundleSourceBase, Path srcP, + Path srcJarP) throws IOException { + Manifest srcManifest = new Manifest(); + srcManifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0"); + srcManifest.getMainAttributes().putValue("Bundle-SymbolicName", bundleSymbolicName + ".src"); + srcManifest.getMainAttributes().putValue("Bundle-Version", + manifest.getMainAttributes().getValue("Bundle-Version").toString()); + + boolean isJsBundle = bundleSymbolicName.endsWith(".js"); + if (!isJsBundle) { srcManifest.getMainAttributes().putValue("Eclipse-SourceBundle", bundleSymbolicName + ";version=\"" + manifest.getMainAttributes().getValue("Bundle-Version")); try (JarOutputStream srcJarOut = new JarOutputStream(Files.newOutputStream(srcJarP), srcManifest)) { copySourcesToJar(srcP, srcJarOut, ""); // add legal notices and licenses - for (Path p : listLegalFilesToInclude(source).values()) { + for (Path p : listLegalFilesToInclude(bundleSourceBase).values()) { srcJarOut.putNextEntry(new JarEntry(p.getFileName().toString())); Files.copy(p, srcJarOut); } } + } else {// JavaScript source maps + srcManifest.getMainAttributes().putValue("Fragment-Host", bundleSymbolicName + ";bundle-version=\"" + + manifest.getMainAttributes().getValue("Bundle-Version")); + try (JarOutputStream srcJarOut = new JarOutputStream(Files.newOutputStream(srcJarP), srcManifest)) { + Files.walkFileTree(bundleSourceBase, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + Path relativeP = bundleSourceBase.relativize(file); + if (!file.getFileName().toString().endsWith(".map")) + return FileVisitResult.CONTINUE; + JarEntry entry = new JarEntry(relativeP.toString()); + srcJarOut.putNextEntry(entry); + Files.copy(file, srcJarOut); + return FileVisitResult.CONTINUE; + } + }); + } } }