]> git.argeo.org Git - cc0/argeo-build.git/blobdiff - src/org/argeo/build/Make.java
Package JavaScript source maps separately
[cc0/argeo-build.git] / src / org / argeo / build / Make.java
index cfedf9a06912e5a74fcc4fd1ccd30315c5f81940..4f22815f1d4cd5295c20823f309ebb3d080fc097 100644 (file)
@@ -226,7 +226,8 @@ public class Make {
                }
 
                // sources
-               for (String bundle : bundles) {
+               boolean atLeastOneBundleToCompile = false;
+               bundles: for (String bundle : bundles) {
                        StringBuilder sb = new StringBuilder();
                        Path bundlePath = execDirectory.resolve(bundle);
                        if (!Files.exists(bundlePath)) {
@@ -237,15 +238,24 @@ public class Make {
                                } else
                                        throw new IllegalArgumentException("Bundle " + bundle + " not found in " + execDirectory);
                        }
-                       sb.append(bundlePath.resolve("src"));
+                       Path bundleSrc = bundlePath.resolve("src");
+                       if (!Files.exists(bundleSrc)) {
+                               logger.log(WARNING, bundleSrc + " does not exist, skipping it, as this is not a Java bundle");
+                               continue bundles;
+                       }
+                       sb.append(bundleSrc);
                        sb.append("[-d");
                        compilerArgs.add(sb.toString());
                        sb = new StringBuilder();
                        sb.append(buildBase.resolve(bundle).resolve("bin"));
                        sb.append("]");
                        compilerArgs.add(sb.toString());
+                       atLeastOneBundleToCompile = true;
                }
 
+               if (!atLeastOneBundleToCompile)
+                       return;
+
                if (logger.isLoggable(INFO))
                        compilerArgs.add("-time");
 
@@ -499,6 +509,10 @@ public class Make {
                                        for (PathMatcher exclude : excludes)
                                                if (exclude.matches(relativeP))
                                                        return FileVisitResult.CONTINUE;
+                                       // skip JavaScript source maps
+                                       if (sourceBundles && file.getFileName().toString().endsWith(".map"))
+                                               return FileVisitResult.CONTINUE;
+
                                        JarEntry entry = new JarEntry(relativeP.toString());
                                        jarOut.putNextEntry(entry);
                                        Files.copy(file, jarOut);
@@ -506,41 +520,43 @@ public class Make {
                                }
                        });
 
-                       // Add all resources from src/
-                       Files.walkFileTree(srcP, new SimpleFileVisitor<Path>() {
-                               @Override
-                               public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
-                                       // skip directories ending with .js
-                                       // TODO find something more robust?
-                                       if (dir.getFileName().toString().endsWith(".js"))
-                                               return FileVisitResult.SKIP_SUBTREE;
-                                       return super.preVisitDirectory(dir, attrs);
-                               }
+                       if (Files.exists(srcP)) {
+                               // Add all resources from src/
+                               Files.walkFileTree(srcP, new SimpleFileVisitor<Path>() {
+                                       @Override
+                                       public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+                                               // skip directories ending with .js
+                                               // TODO find something more robust?
+                                               if (dir.getFileName().toString().endsWith(".js"))
+                                                       return FileVisitResult.SKIP_SUBTREE;
+                                               return super.preVisitDirectory(dir, attrs);
+                                       }
 
-                               @Override
-                               public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
-                                       if (file.getFileName().toString().endsWith(".java")
-                                                       || file.getFileName().toString().endsWith(".class"))
+                                       @Override
+                                       public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                                               if (file.getFileName().toString().endsWith(".java")
+                                                               || file.getFileName().toString().endsWith(".class"))
+                                                       return FileVisitResult.CONTINUE;
+                                               jarOut.putNextEntry(new JarEntry(srcP.relativize(file).toString()));
+                                               if (!Files.isDirectory(file))
+                                                       Files.copy(file, jarOut);
                                                return FileVisitResult.CONTINUE;
-                                       jarOut.putNextEntry(new JarEntry(srcP.relativize(file).toString()));
-                                       if (!Files.isDirectory(file))
-                                               Files.copy(file, jarOut);
-                                       return FileVisitResult.CONTINUE;
+                                       }
+                               });
+
+                               // add sources
+                               // TODO add effective BND, Eclipse project file, etc., in order to be able to
+                               // repackage
+                               if (!sourceBundles) {
+                                       copySourcesToJar(srcP, jarOut, "OSGI-OPT/src/");
                                }
-                       });
+                       }
 
                        // add legal notices and licenses
                        for (Path p : listLegalFilesToInclude(source).values()) {
                                jarOut.putNextEntry(new JarEntry(p.getFileName().toString()));
                                Files.copy(p, jarOut);
                        }
-
-                       // add sources
-                       // TODO add effective BND, Eclipse project file, etc., in order to be able to
-                       // repackage
-                       if (!sourceBundles) {
-                               copySourcesToJar(srcP, jarOut, "OSGI-OPT/src/");
-                       }
                }
 
                if (sourceBundles) {// create separate sources jar
@@ -553,15 +569,36 @@ public class Make {
                        srcManifest.getMainAttributes().putValue("Bundle-SymbolicName", bundleSymbolicName + ".src");
                        srcManifest.getMainAttributes().putValue("Bundle-Version",
                                        manifest.getMainAttributes().getValue("Bundle-Version").toString());
-                       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()) {
-                                       srcJarOut.putNextEntry(new JarEntry(p.getFileName().toString()));
-                                       Files.copy(p, srcJarOut);
+
+                       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()) {
+                                               srcJarOut.putNextEntry(new JarEntry(p.getFileName().toString()));
+                                               Files.copy(p, srcJarOut);
+                                       }
+                               }
+                       } else {// JavaScript source maps
+                               srcManifest.getMainAttributes().putValue("Fragment-Host",
+                                               bundleSymbolicName + ";version=\"" + manifest.getMainAttributes().getValue("Bundle-Version"));
+                               try (JarOutputStream srcJarOut = new JarOutputStream(Files.newOutputStream(srcJarP), srcManifest)) {
+                                       Files.walkFileTree(source, new SimpleFileVisitor<Path>() {
+                                               @Override
+                                               public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                                                       Path relativeP = source.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;
+                                               }
+                                       });
                                }
                        }
                }