X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.init%2Fsrc%2Forg%2Fargeo%2Finit%2Fosgi%2FOsgiBoot.java;h=f5b260caba404735f9f296830bab0e6e29c369bf;hb=1a65fa72abac6a458139240efa281138aac9ef2b;hp=884461b12b5b0e5bb322ddd96705c619af6a0f1f;hpb=3b45f571938e0eb6803084aac3f2bd298e6026ba;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.init/src/org/argeo/init/osgi/OsgiBoot.java b/org.argeo.init/src/org/argeo/init/osgi/OsgiBoot.java index 884461b12..f5b260cab 100644 --- a/org.argeo.init/src/org/argeo/init/osgi/OsgiBoot.java +++ b/org.argeo.init/src/org/argeo/init/osgi/OsgiBoot.java @@ -98,19 +98,25 @@ public class OsgiBoot implements OsgiBootConstants { queryPart = source.substring(qmIndex); source = source.substring(0, qmIndex); } + // TODO centralise in A" package? if (source.trim().equals(A2Source.DEFAULT_A2_URI)) { if (Files.exists(homePath)) provisioningManager.registerSource( A2Source.SCHEME_A2 + "://" + homePath.toString() + "/.local/share/a2" + queryPart); provisioningManager.registerSource(A2Source.SCHEME_A2 + ":///usr/local/share/a2" + queryPart); + provisioningManager.registerSource(A2Source.SCHEME_A2 + ":///usr/local/lib/a2" + queryPart); provisioningManager.registerSource(A2Source.SCHEME_A2 + ":///usr/share/a2" + queryPart); + provisioningManager.registerSource(A2Source.SCHEME_A2 + ":///usr/lib/a2" + queryPart); } else if (source.trim().equals(A2Source.DEFAULT_A2_REFERENCE_URI)) { if (Files.exists(homePath)) provisioningManager.registerSource(A2Source.SCHEME_A2_REFERENCE + "://" + homePath.toString() + "/.local/share/a2" + queryPart); provisioningManager .registerSource(A2Source.SCHEME_A2_REFERENCE + ":///usr/local/share/a2" + queryPart); + provisioningManager + .registerSource(A2Source.SCHEME_A2_REFERENCE + ":///usr/local/lib/a2" + queryPart); provisioningManager.registerSource(A2Source.SCHEME_A2_REFERENCE + ":///usr/share/a2" + queryPart); + provisioningManager.registerSource(A2Source.SCHEME_A2_REFERENCE + ":///usr/lib/a2" + queryPart); } else { provisioningManager.registerSource(source + queryPart); } @@ -375,7 +381,23 @@ public class OsgiBoot implements OsgiBootConstants { for (String bsn : startLevels.get(level)) bundleStartLevels.put(bsn, level); } - for (Bundle bundle : bundleContext.getBundles()) { + + // keep only bundles with the highest version + Map startableBundles = new HashMap<>(); + bundles: for (Bundle bundle : bundleContext.getBundles()) { + if (bundle.getVersion() == null) + continue bundles; + String bsn = bundle.getSymbolicName(); + if (!startableBundles.containsKey(bsn)) { + startableBundles.put(bsn, bundle); + } else { + if (bundle.getVersion().compareTo(startableBundles.get(bsn).getVersion()) > 0) { + startableBundles.put(bsn, bundle); + } + } + } + + for (Bundle bundle : startableBundles.values()) { String bsn = bundle.getSymbolicName(); if (bundleStartLevels.containsKey(bsn)) { BundleStartLevel bundleStartLevel = bundle.adapt(BundleStartLevel.class); @@ -388,7 +410,7 @@ public class OsgiBoot implements OsgiBootConstants { OsgiBootUtils.error("Cannot mark " + bsn + " as started", e); } if (OsgiBootUtils.isDebug()) - OsgiBootUtils.debug(bsn + " starts at level " + level); + OsgiBootUtils.debug(bsn + " v" + bundle.getVersion() + " starts at level " + level); } } }