X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=src%2Forg%2Fargeo%2Fbuild%2FRepackage.java;h=df630055aec75973df0dbbf5046d57324bdcdabb;hb=5780358cbe118241527a5813055fa2a277ef78bc;hp=d902efb1a5c2656101fe8d4e4a44e6d65822e6fd;hpb=e7090f399609f0c1c80729e426c2463efed7e9cc;p=cc0%2Fargeo-build.git diff --git a/src/org/argeo/build/Repackage.java b/src/org/argeo/build/Repackage.java index d902efb..df63005 100644 --- a/src/org/argeo/build/Repackage.java +++ b/src/org/argeo/build/Repackage.java @@ -696,6 +696,21 @@ public class Repackage { Manifest sourceManifest = jarIn.getManifest(); Manifest manifest = sourceManifest != null ? new Manifest(sourceManifest) : new Manifest(); + // singleton + boolean isSingleton = false; + String rawSourceSymbolicName = manifest.getMainAttributes() + .getValue(ManifestConstants.BUNDLE_SYMBOLICNAME.toString()); + if (rawSourceSymbolicName != null) { + + // make sure there is no directive + String[] arr = rawSourceSymbolicName.split(";"); + for (int i = 1; i < arr.length; i++) { + if (arr[i].trim().equals("singleton:=true")) + isSingleton = true; + logger.log(DEBUG, file.getFileName() + " is a singleton"); + } + } + // remove problematic entries in MANIFEST manifest.getEntries().clear(); @@ -786,6 +801,12 @@ public class Repackage { // copy MANIFEST Path manifestPath = targetBundleDir.resolve("META-INF/MANIFEST.MF"); Files.createDirectories(manifestPath.getParent()); + + if (isSingleton && entries.containsKey(BUNDLE_SYMBOLICNAME.toString())) { + entries.put(BUNDLE_SYMBOLICNAME.toString(), + entries.get(BUNDLE_SYMBOLICNAME.toString()) + ";singleton:=true"); + } + for (String key : entries.keySet()) { String value = entries.get(key); Object previousValue = manifest.getMainAttributes().putValue(key, value);