ensure a BundleDefinition does not require a File to compare two definitions
diff --git a/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java b/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
index f3946b2..e0d358f 100644
--- a/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
+++ b/winegrower-core/src/main/java/org/apache/winegrower/Ripener.java
@@ -412,10 +412,12 @@
}
private int compareBundles(final StandaloneScanner.BundleDefinition bundle1, final StandaloneScanner.BundleDefinition bundle2) {
- final int index1 = matchPriorities(bundle1.getJar().getName());
- final int index2 = matchPriorities(bundle2.getJar().getName());
+ final String id1 = getBundleId(bundle1);
+ final String id2 = getBundleId(bundle2);
+ final int index1 = matchPriorities(id1);
+ final int index2 = matchPriorities(id2);
if (index1 == index2) {
- return bundle1.getJar().getName().compareTo(bundle2.getJar().getName());
+ return id1.compareTo(id2);
}
if (index1 == -1) {
return 1;
@@ -426,6 +428,14 @@
return index1 - index2;
}
+ private String getBundleId(final StandaloneScanner.BundleDefinition bundle) {
+ return ofNullable(bundle.getJar()).map(File::getName)
+ .orElseGet(() -> Stream.of("Bundle-SymbolicName", "Bundle-Name")
+ .map(k -> bundle.getManifest().getMainAttributes().getValue(k))
+ .findFirst()
+ .orElseGet(() -> Long.toString(System.identityHashCode(bundle))));
+ }
+
private int matchPriorities(final String name) {
return configuration.getPrioritizedBundles().stream()
.filter(name::startsWith)