}
// 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)) {
} 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");
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);
}
});
- // Add all resources from src/
- Files.walkFileTree(srcP, new SimpleFileVisitor<Path>() {
- @Override
- public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
- if (file.getFileName().toString().endsWith(".java")
- || file.getFileName().toString().endsWith(".class"))
+ 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"))
+ 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
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;
+ }
+ });
}
}
}