X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=src%2Forg%2Fargeo%2Fbuild%2FRepackage.java;h=2732167646dd830ed8be3036dbe776e4bee713df;hb=172f0707475dc7c1ad43a19d035e4b7db0f4905e;hp=c3fbcaf8850278db4fb2e67e1b2e100cf76770c5;hpb=02cad44ed0bd3929ef5d6deb175b1673f5096e3f;p=cc0%2Fargeo-build.git diff --git a/src/org/argeo/build/Repackage.java b/src/org/argeo/build/Repackage.java index c3fbcaf..2732167 100644 --- a/src/org/argeo/build/Repackage.java +++ b/src/org/argeo/build/Repackage.java @@ -98,13 +98,14 @@ public class Repackage { List> toDos = new ArrayList<>(); for (int i = 1; i < args.length; i++) { - Path p = Paths.get(args[i]); - if (sequential) - factory.processCategory(p); + Path categoryPath = Paths.get(args[i]); + factory.cleanPreviousFailedBuild(categoryPath); + if (sequential) // sequential processing happens here + factory.processCategory(categoryPath); else - toDos.add(CompletableFuture.runAsync(() -> factory.processCategory(p))); + toDos.add(CompletableFuture.runAsync(() -> factory.processCategory(categoryPath))); } - if (!sequential) + if (!sequential)// parallel processing CompletableFuture.allOf(toDos.toArray(new CompletableFuture[toDos.size()])).join(); // Summary @@ -115,6 +116,25 @@ public class Repackage { logger.log(INFO, "# License summary:\n" + sb); } + /** Deletes remaining sub directories. */ + void cleanPreviousFailedBuild(Path categoryPath) { + Path outputCategoryPath = a2Base.resolve(categoryPath); + if (!Files.exists(outputCategoryPath)) + return; + // clean previous failed build + try { + for (Path subDir : Files.newDirectoryStream(outputCategoryPath, (d) -> Files.isDirectory(d))) { + if (Files.exists(subDir)) { + logger.log(WARNING, "Bundle dir " + subDir + + " already exists, probably from a previous failed build, deleting it..."); + deleteDirectory(subDir); + } + } + } catch (IOException e) { + logger.log(ERROR, "Cannot clean previous build", e); + } + } + /** MANIFEST headers. */ enum ManifestHeader { // OSGi @@ -687,7 +707,8 @@ public class Repackage { } if (!fileProps.containsKey(EXPORT_PACKAGE.toString())) { - fileProps.put(EXPORT_PACKAGE.toString(), "*"); + fileProps.put(EXPORT_PACKAGE.toString(), + "*;version=\"" + fileProps.getProperty(BUNDLE_VERSION.toString()) + "\""); } // BND analysis @@ -913,6 +934,10 @@ public class Repackage { map.put(key.toString(), commonProps.getProperty(key.toString())); A2Origin origin = new A2Origin(); Path bundleDir = processBundleJar(file, targetCategoryBase, map, origin); + if (bundleDir == null) { + logger.log(WARNING, "No bundle dir created for " + file + ", skipping..."); + return FileVisitResult.CONTINUE; + } origins.put(bundleDir, origin); logger.log(DEBUG, () -> "Processed " + file); } @@ -996,6 +1021,8 @@ public class Repackage { Manifest sourceManifest; try (JarInputStream jarIn = new JarInputStream(Files.newInputStream(file), false)) { sourceManifest = jarIn.getManifest(); + if (sourceManifest == null) + logger.log(WARNING, file + " has no manifest"); manifest = sourceManifest != null ? new Manifest(sourceManifest) : new Manifest(); String rawSourceSymbolicName = manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME.toString()); @@ -1018,6 +1045,14 @@ public class Repackage { nameVersion = new NameVersion(ourSymbolicName, ourVersion); } else { nameVersion = nameVersionFromManifest(manifest); + if (nameVersion == null) { + // hack for weird issue with JNA jar in Eclipse + String[] arr_ = file.getFileName().toString().split("_"); + String v = arr_[1].substring(0, arr_[1].length() - 4);// remove .jar + nameVersion = new NameVersion(arr_[0], v); + logger.log(WARNING, file + " has no symbolic name, trying " + nameVersion.getName() + "/" + + nameVersion.getVersion() + " based on its name"); + } if (ourVersion != null && !nameVersion.getVersion().equals(ourVersion)) { logger.log(WARNING, "Original version is " + nameVersion.getVersion() + " while new version is " + ourVersion); @@ -1029,13 +1064,7 @@ public class Repackage { } } - // create bundle dir bundleDir = targetBase.resolve(nameVersion.getName() + "." + nameVersion.getBranch()); - if (Files.exists(bundleDir)) { - logger.log(WARNING, "Bundle dir " + bundleDir - + " already exists, probably from a previous failed build, deleting it..."); - deleteDirectory(bundleDir); - } // copy original MANIFEST if (sourceManifest != null) {