SLING-9597 Feature Analyser should substitute {dollar} before passing properties to framework
diff --git a/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java b/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
index 7698a65..c93cb41 100644
--- a/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
+++ b/src/main/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScanner.java
@@ -22,7 +22,6 @@
 import java.io.IOException;
 import java.io.Reader;
 import java.io.Writer;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
@@ -137,7 +136,11 @@
             throws IOException {
         Path appPropsFile = Files.createTempFile("appProps", ".properties");
         Properties appPropsProperties = new Properties();
-        appPropsProperties.putAll(appProps);
+
+        for (Map.Entry<String,String> entry : appProps.entrySet()) {
+            appPropsProperties.put(entry.getKey(), entry.getValue().replaceAll("\\Q{dollar}\\E", "\\$"));
+        }
+
         try (Writer writer = new FileWriter(appPropsFile.toFile())) {
             appPropsProperties.store(writer, "appProps");
         }
diff --git a/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java b/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
index 857be73..3551963 100644
--- a/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
+++ b/src/test/java/org/apache/sling/feature/scanner/impl/FelixFrameworkScannerTest.java
@@ -91,8 +91,9 @@
         FelixFrameworkScanner ffs = new FelixFrameworkScanner();
 
         Map<String,String> kvmap = new HashMap<>();
-        kvmap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.foo.bar");
+        kvmap.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA, "org.foo.bar;version=\"{dollar}{java.specification.version}\"");
         kvmap.put(Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA, "ding.dong;ding.dong=\"yeah!\"");
+        kvmap.put("felix.systempackages.substitution", "true");
 
         BundleDescriptor bundleDescriptor = ffs.scan(new ArtifactId("org.apache.felix",
                 "org.apache.felix.framework",
@@ -104,12 +105,16 @@
                     }
                 });
 
+        String javaVersion = System.getProperty("java.specification.version");
+
         Set<PackageInfo> exportedPackages = bundleDescriptor.getExportedPackages();
         assertFalse(exportedPackages.isEmpty());
         boolean foundFooBar = false;
         for (PackageInfo pi : exportedPackages) {
-            if (pi.getName().equals("org.foo.bar"))
+            if (pi.getName().equals("org.foo.bar")) {
+                assertTrue(pi.getVersion().startsWith(javaVersion));
                 foundFooBar = true;
+            }
         }
         assertTrue(foundFooBar);