You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2018/02/23 22:59:25 UTC
svn commit: r1825179 - in /felix/trunk/osgi-r7/framework/src/main:
java/org/apache/felix/framework/ java/org/apache/felix/framework/util/
java/org/apache/felix/framework/util/manifestparser/ resources/
Author: pauls
Date: Fri Feb 23 22:59:25 2018
New Revision: 1825179
URL: http://svn.apache.org/viewvc?rev=1825179&view=rev
Log:
FELIX-5792: Add basic support for java.* exports and imports and remove old, unsupported jdk profiles.
Modified:
felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/Felix.java
felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/Util.java
felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
felix/trunk/osgi-r7/framework/src/main/resources/default.properties
Modified: felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/Felix.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/Felix.java?rev=1825179&r1=1825178&r2=1825179&view=diff
==============================================================================
--- felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/Felix.java (original)
+++ felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/Felix.java Fri Feb 23 22:59:25 2018
@@ -4639,6 +4639,8 @@ public class Felix extends BundleImpl im
// if not explicitly configured.
loadFromDefaultIfNotDefined(defaultProperties, Constants.FRAMEWORK_EXECUTIONENVIRONMENT);
+ loadFromDefaultIfNotDefined(defaultProperties, Constants.FRAMEWORK_SYSTEMPACKAGES);
+
// Set supported native capabilities to default value,
// if not explicitly configured.
loadPrefixFromDefaultIfNotDefined(m_configMutableMap, defaultProperties, FelixConstants.NATIVE_OS_NAME_ALIAS_PREFIX);
Modified: felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/Util.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/Util.java?rev=1825179&r1=1825178&r2=1825179&view=diff
==============================================================================
--- felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/Util.java (original)
+++ felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/Util.java Fri Feb 23 22:59:25 2018
@@ -35,6 +35,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
+import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.felix.framework.Felix;
@@ -108,14 +109,32 @@ public class Util
moduleLayer = c_ModuleLayer.getMethod("boot").invoke(null);
}
+ Set<String> javaExports = new TreeSet<String>();
for (Object module : ((Iterable) c_ModuleLayer.getMethod("modules").invoke(moduleLayer)))
{
if ((Boolean) m_canRead.invoke(self, module))
{
Object name = m_getName.invoke(module);
properties.put("felix.detect.jpms." + name, name);
+ for (String export : (Iterable<String>) c_Module.getMethod("getPackages").invoke(module))
+ {
+ if (export.startsWith("java.") && (Boolean) c_Module.getMethod("isExported", String.class, c_Module).invoke(module, export, self))
+ {
+ javaExports.add(export);
+ }
+ }
}
}
+
+ if (!javaExports.isEmpty())
+ {
+ StringBuilder builder = new StringBuilder();
+ for (String export : javaExports) {
+ builder.append(',').append(export);
+ }
+ properties.put("felix.detect.jpms.java", builder.toString());
+ }
+
properties.put("felix.detect.jpms", "jpms");
}
catch (Exception ex)
Modified: felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java?rev=1825179&r1=1825178&r2=1825179&view=diff
==============================================================================
--- felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java (original)
+++ felix/trunk/osgi-r7/framework/src/main/java/org/apache/felix/framework/util/manifestparser/ManifestParser.java Fri Feb 23 22:59:25 2018
@@ -338,22 +338,17 @@ public class ManifestParser
VersionRange.parse(v.toString()));
}
- // Verify java.* is not imported, nor any duplicate imports.
+ // Verify no duplicate imports.
for (String pkgName : clause.m_paths)
{
if (!dupeSet.contains(pkgName))
{
- // Verify that java.* packages are not imported.
- if (pkgName.startsWith("java."))
- {
- throw new BundleException(
- "Importing java.* packages not allowed: " + pkgName);
- }
+
// The character "." has no meaning in the OSGi spec except
// when placed on the bundle class path. Some people, however,
// mistakenly think it means the default package when imported
// or exported. This is not correct. It is invalid.
- else if (pkgName.equals("."))
+ if (pkgName.equals("."))
{
throw new BundleException("Imporing '.' is invalid.");
}
@@ -531,16 +526,10 @@ public class ManifestParser
VersionRange.parse(v.toString()));
}
- // Dynamic imports can have duplicates, so verify that java.*
- // packages are not imported.
+ // Dynamic imports can have duplicates, verify that no partial package name wild carding is used
for (String pkgName : clause.m_paths)
{
- if (pkgName.startsWith("java."))
- {
- throw new BundleException(
- "Dynamically importing java.* packages not allowed: " + pkgName);
- }
- else if (!pkgName.equals("*") && pkgName.endsWith("*") && !pkgName.endsWith(".*"))
+ if (!pkgName.equals("*") && pkgName.endsWith("*") && !pkgName.endsWith(".*"))
{
throw new BundleException(
"Partial package name wild carding is not allowed: " + pkgName);
@@ -849,18 +838,17 @@ public class ManifestParser
String mv, String bsn, Version bv)
throws BundleException
{
- // Verify that "java.*" packages are not exported.
for (ParsedHeaderClause clause : clauses)
{
// Verify that the named package has not already been declared.
for (String pkgName : clause.m_paths)
{
- // Verify that java.* packages are not exported.
- if (pkgName.startsWith("java."))
+ // Verify that java.* packages are not exported (except from the system bundle).
+ if (!FelixConstants.SYSTEM_BUNDLE_SYMBOLICNAME.equals(bsn) && pkgName.startsWith("java."))
{
throw new BundleException(
"Exporting java.* packages not allowed: "
- + pkgName);
+ + pkgName, BundleException.MANIFEST_ERROR);
}
// The character "." has no meaning in the OSGi spec except
// when placed on the bundle class path. Some people, however,
Modified: felix/trunk/osgi-r7/framework/src/main/resources/default.properties
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/framework/src/main/resources/default.properties?rev=1825179&r1=1825178&r2=1825179&view=diff
==============================================================================
--- felix/trunk/osgi-r7/framework/src/main/resources/default.properties (original)
+++ felix/trunk/osgi-r7/framework/src/main/resources/default.properties Fri Feb 23 22:59:25 2018
@@ -148,260 +148,79 @@ org.osgi.framework.system.packages=\
#
# Java platform package export properties.
#
-jre-1.3=, \
- javax.accessibility;uses:="javax.swing.text";version="0.0.0.1_003_J2SE", \
- javax.naming.directory;uses:="javax.naming";version="0.0.0.1_003_J2SE", \
- javax.naming.event;uses:="javax.naming,javax.naming.directory";version="0.0.0.1_003_J2SE", \
- javax.naming.ldap;uses:="javax.naming,javax.naming.directory,javax.naming.event";version="0.0.0.1_003_J2SE", \
- javax.naming.spi;uses:="javax.naming,javax.naming.directory";version="0.0.0.1_003_J2SE", \
- javax.naming;uses:="javax.naming.spi";version="0.0.0.1_003_J2SE", \
- javax.rmi.CORBA;uses:="org.omg.CORBA,org.omg.CORBA_2_3.portable,org.omg.CORBA.portable,org.omg.SendingContext";version="0.0.0.1_003_J2SE", \
- javax.rmi;uses:="org.omg.CORBA,javax.rmi.CORBA";version="0.0.0.1_003_J2SE", \
- javax.sound.midi.spi;uses:="javax.sound.midi";version="0.0.0.1_003_J2SE", \
- javax.sound.midi;uses:="javax.sound.midi.spi";version="0.0.0.1_003_J2SE", \
- javax.sound.sampled.spi;uses:="javax.sound.sampled";version="0.0.0.1_003_J2SE", \
- javax.sound.sampled;uses:="javax.sound.sampled.spi";version="0.0.0.1_003_J2SE", \
- javax.swing.border;uses:="javax.swing";version="0.0.0.1_003_J2SE", \
- javax.swing.colorchooser;uses:="javax.swing.event,javax.swing,javax.swing.text,javax.swing.border,javax.accessibility";version="0.0.0.1_003_J2SE", \
- javax.swing.event;uses:="javax.swing,javax.swing.text,javax.swing.table,javax.swing.tree,javax.swing.undo";version="0.0.0.1_003_J2SE", \
- javax.swing.filechooser;uses:="javax.swing";version="0.0.0.1_003_J2SE", \
- javax.swing.plaf.basic;uses:="javax.swing,javax.swing.border,javax.swing.plaf,javax.swing.text,javax.swing.event,javax.swing.colorchooser,javax.accessibility,javax.swing.filechooser,javax.swing.text.html,javax.swing.table,javax.swing.tree";version="0.0.0.1_003_J2SE", \
- javax.swing.plaf.metal;uses:="javax.swing.plaf,javax.swing.border,javax.swing,javax.swing.text,javax.swing.plaf.basic,javax.swing.event,javax.swing.filechooser,javax.accessibility,javax.swing.tree";version="0.0.0.1_003_J2SE", \
- javax.swing.plaf.multi;uses:="javax.accessibility,javax.swing,javax.swing.plaf,javax.swing.filechooser,javax.swing.text,javax.swing.tree";version="0.0.0.1_003_J2SE", \
- javax.swing.plaf;uses:="javax.swing,javax.swing.border,javax.accessibility,javax.swing.filechooser,javax.swing.text,javax.swing.tree";version="0.0.0.1_003_J2SE", \
- javax.swing.table;uses:="javax.swing.event,javax.swing.plaf,javax.swing.border,javax.swing,javax.accessibility";version="0.0.0.1_003_J2SE", \
- javax.swing.text.html.parser;uses:="javax.swing.text.html,javax.swing.text";version="0.0.0.1_003_J2SE", \
- javax.swing.text.html;uses:="javax.swing.text,javax.swing,javax.swing.event,javax.swing.border,javax.swing.undo,javax.swing.plaf,javax.swing.text.html.parser";version="0.0.0.1_003_J2SE", \
- javax.swing.text.rtf;uses:="javax.swing.text";version="0.0.0.1_003_J2SE", \
- javax.swing.text;uses:="javax.swing.event,javax.swing.tree,javax.swing.undo,javax.swing,javax.swing.plaf,javax.swing.plaf.basic,javax.accessibility,javax.swing.text.html";version="0.0.0.1_003_J2SE", \
- javax.swing.tree;uses:="javax.swing.event,javax.swing,javax.swing.border,javax.swing.plaf";version="0.0.0.1_003_J2SE", \
- javax.swing.undo;uses:="javax.swing,javax.swing.event";version="0.0.0.1_003_J2SE", \
- javax.swing;uses:="javax.swing.event,javax.swing.text,javax.accessibility,javax.swing.plaf,javax.swing.border,javax.swing.tree,javax.swing.table,javax.swing.colorchooser,javax.swing.plaf.basic,javax.swing.text.html,javax.swing.filechooser";version="0.0.0.1_003_J2SE", \
- javax.transaction;version="0.0.0.1_003_J2SE", \
- org.omg.CORBA.DynAnyPackage;uses:="org.omg.CORBA";version="0.0.0.1_003_J2SE", \
- org.omg.CORBA.ORBPackage;uses:="org.omg.CORBA";version="0.0.0.1_003_J2SE", \
- org.omg.CORBA.TypeCodePackage;uses:="org.omg.CORBA";version="0.0.0.1_003_J2SE", \
- org.omg.CORBA.portable;uses:="org.omg.CORBA,org.omg.CORBA_2_3.portable";version="0.0.0.1_003_J2SE", \
- org.omg.CORBA;uses:="org.omg.CORBA.portable,org.omg.CORBA.DynAnyPackage,org.omg.CORBA.ORBPackage,org.omg.CORBA_2_3.portable,org.omg.CORBA.TypeCodePackage";version="0.0.0.1_003_J2SE", \
- org.omg.CORBA_2_3.portable;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_003_J2SE", \
- org.omg.CORBA_2_3;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_003_J2SE", \
- org.omg.CosNaming.NamingContextPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.CosNaming";version="0.0.0.1_003_J2SE", \
- org.omg.CosNaming;uses:="org.omg.CORBA.portable,org.omg.CORBA,org.omg.CosNaming.NamingContextPackage";version="0.0.0.1_003_J2SE", \
- org.omg.SendingContext;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_003_J2SE", \
- org.omg.stub.java.rmi;uses:="javax.rmi.CORBA";version="0.0.0.1_003_J2SE"
+jre-1.6-java-base=, \
+ java.applet, \
+ java.awt, \
+ java.awt.color, \
+ java.awt.datatransfer, \
+ java.awt.dnd, \
+ java.awt.event, \
+ java.awt.font, \
+ java.awt.geom, \
+ java.awt.im, \
+ java.awt.im.spi, \
+ java.awt.image, \
+ java.awt.image.renderable, \
+ java.awt.print, \
+ java.beans, \
+ java.beans.beancontext, \
+ java.io, \
+ java.lang, \
+ java.lang.annotation, \
+ java.lang.instrument, \
+ java.lang.management, \
+ java.lang.ref, \
+ java.lang.reflect, \
+ java.math, \
+ java.net, \
+ java.nio, \
+ java.nio.channels, \
+ java.nio.channels.spi, \
+ java.nio.charset, \
+ java.nio.charset.spi, \
+ java.rmi, \
+ java.rmi.activation, \
+ java.rmi.dgc, \
+ java.rmi.registry, \
+ java.rmi.server, \
+ java.security, \
+ java.security.acl, \
+ java.security.cert, \
+ java.security.interfaces, \
+ java.security.spec, \
+ java.sql, \
+ java.text, \
+ java.text.spi, \
+ java.util, \
+ java.util.concurrent, \
+ java.util.concurrent.atomic, \
+ java.util.concurrent.locks, \
+ java.util.jar, \
+ java.util.logging, \
+ java.util.prefs, \
+ java.util.regex, \
+ java.util.spi, \
+ java.util.zip
-jre-1.4=, \
- javax.accessibility;uses:="javax.swing.text";version="0.0.0.1_004_J2SE", \
- javax.crypto.interfaces;uses:="javax.crypto.spec,javax.crypto";version="0.0.0.1_004_J2SE", \
- javax.crypto.spec;uses:="javax.crypto";version="0.0.0.1_004_J2SE", \
- javax.crypto;uses:="javax.crypto.spec";version="0.0.0.1_004_J2SE", \
- javax.imageio.event;uses:="javax.imageio";version="0.0.0.1_004_J2SE", \
- javax.imageio.metadata;uses:="org.w3c.dom,javax.imageio,org.apache.crimson.util";version="0.0.0.1_004_J2SE", \
- javax.imageio.plugins.jpeg;uses:="javax.imageio";version="0.0.0.1_004_J2SE", \
- javax.imageio.spi;uses:="javax.imageio.stream,javax.imageio,javax.imageio.metadata";version="0.0.0.1_004_J2SE", \
- javax.imageio.stream;uses:="javax.imageio";version="0.0.0.1_004_J2SE", \
- javax.imageio;uses:="javax.imageio.metadata,javax.imageio.stream,javax.imageio.spi,javax.imageio.event";version="0.0.0.1_004_J2SE", \
- javax.naming.directory;uses:="javax.naming";version="0.0.0.1_004_J2SE", \
- javax.naming.event;uses:="javax.naming,javax.naming.directory";version="0.0.0.1_004_J2SE", \
- javax.naming.ldap;uses:="javax.naming,javax.naming.directory,javax.net.ssl,javax.naming.event";version="0.0.0.1_004_J2SE", \
- javax.naming.spi;uses:="javax.naming,javax.naming.directory";version="0.0.0.1_004_J2SE", \
- javax.naming;uses:="javax.naming.spi";version="0.0.0.1_004_J2SE", \
- javax.net.ssl;uses:="javax.security.cert,javax.net";version="0.0.0.1_004_J2SE", \
- javax.net;version="0.0.0.1_004_J2SE", \
- javax.print.attribute.standard;uses:="javax.print.attribute";version="0.0.0.1_004_J2SE", \
- javax.print.attribute;version="0.0.0.1_004_J2SE", \
- javax.print.event;uses:="javax.print,javax.print.attribute";version="0.0.0.1_004_J2SE", \
- javax.print;uses:="javax.print.attribute,javax.print.event,javax.print.attribute.standard";version="0.0.0.1_004_J2SE", \
- javax.rmi.CORBA;uses:="org.omg.CORBA,org.omg.CORBA_2_3.portable,org.omg.CORBA.portable,org.omg.SendingContext";version="0.0.0.1_004_J2SE", \
- javax.rmi;uses:="org.omg.CORBA,javax.rmi.CORBA";version="0.0.0.1_004_J2SE", \
- javax.security.auth.callback;version="0.0.0.1_004_J2SE", \
- javax.security.auth.kerberos;uses:="javax.security.auth,javax.crypto";version="0.0.0.1_004_J2SE", \
- javax.security.auth.login;uses:="javax.security.auth,javax.security.auth.callback";version="0.0.0.1_004_J2SE", \
- javax.security.auth.spi;uses:="javax.security.auth.callback,javax.security.auth.login,javax.security.auth";version="0.0.0.1_004_J2SE", \
- javax.security.auth.x500;uses:="javax.security.auth";version="0.0.0.1_004_J2SE", \
- javax.security.auth;version="0.0.0.1_004_J2SE", \
- javax.security.cert;version="0.0.0.1_004_J2SE", \
- javax.sound.midi.spi;uses:="javax.sound.midi";version="0.0.0.1_004_J2SE", \
- javax.sound.midi;uses:="javax.sound.midi.spi";version="0.0.0.1_004_J2SE", \
- javax.sound.sampled.spi;uses:="javax.sound.sampled";version="0.0.0.1_004_J2SE", \
- javax.sound.sampled;uses:="javax.sound.sampled.spi";version="0.0.0.1_004_J2SE", \
- javax.sql;uses:="javax.transaction.xa";version="0.0.0.1_004_J2SE", \
- javax.swing.border;uses:="javax.swing";version="0.0.0.1_004_J2SE", \
- javax.swing.colorchooser;uses:="javax.swing.event,javax.swing,javax.swing.border,javax.accessibility";version="0.0.0.1_004_J2SE", \
- javax.swing.event;uses:="javax.swing,javax.swing.text,javax.swing.table,javax.swing.tree,javax.swing.undo";version="0.0.0.1_004_J2SE", \
- javax.swing.filechooser;uses:="javax.swing";version="0.0.0.1_004_J2SE", \
- javax.swing.plaf.basic;uses:="javax.swing.border,javax.swing,javax.swing.plaf,javax.swing.text,javax.swing.event,javax.swing.colorchooser,javax.accessibility,javax.swing.filechooser,javax.swing.text.html,javax.sound.sampled,javax.swing.table,javax.swing.tree";version="0.0.0.1_004_J2SE", \
- javax.swing.plaf.metal;uses:="javax.swing.plaf,javax.swing,javax.swing.border,javax.swing.text,javax.swing.plaf.basic,javax.swing.filechooser,javax.swing.event,javax.swing.table,javax.accessibility,javax.swing.tree";version="0.0.0.1_004_J2SE", \
- javax.swing.plaf.multi;uses:="javax.accessibility,javax.swing,javax.swing.plaf,javax.swing.filechooser,javax.swing.text,javax.swing.tree";version="0.0.0.1_004_J2SE", \
- javax.swing.plaf;uses:="javax.swing,javax.swing.border,javax.accessibility,javax.swing.filechooser,javax.swing.text,javax.swing.tree";version="0.0.0.1_004_J2SE", \
- javax.swing.table;uses:="javax.swing.event,javax.swing.plaf,javax.swing.border,javax.swing,javax.accessibility";version="0.0.0.1_004_J2SE", \
- javax.swing.text.html.parser;uses:="javax.swing.text,javax.swing.text.html";version="0.0.0.1_004_J2SE", \
- javax.swing.text.html;uses:="javax.swing.event,javax.swing.text,javax.accessibility,javax.swing,javax.swing.plaf,javax.swing.border,javax.swing.undo,javax.swing.text.html.parser";version="0.0.0.1_004_J2SE", \
- javax.swing.text.rtf;uses:="javax.swing.text";version="0.0.0.1_004_J2SE", \
- javax.swing.text;uses:="javax.swing.event,javax.swing.tree,javax.swing.undo,javax.swing,javax.swing.plaf,javax.swing.plaf.basic,javax.accessibility,javax.swing.text.html";version="0.0.0.1_004_J2SE", \
- javax.swing.tree;uses:="javax.swing.event,javax.swing,javax.swing.border,javax.swing.plaf";version="0.0.0.1_004_J2SE", \
- javax.swing.undo;uses:="javax.swing,javax.swing.event";version="0.0.0.1_004_J2SE", \
- javax.swing;uses:="javax.swing.event,javax.accessibility,javax.swing.text,javax.swing.plaf,javax.swing.border,javax.swing.tree,javax.swing.table,javax.swing.colorchooser,javax.swing.plaf.basic,javax.swing.text.html,javax.swing.filechooser";version="0.0.0.1_004_J2SE", \
- javax.transaction.xa;version="0.0.0.1_004_J2SE", \
- javax.transaction;version="0.0.0.1_004_J2SE", \
- javax.xml.parsers;uses:="org.w3c.dom,org.xml.sax,org.xml.sax.helpers";version="0.0.0.1_004_J2SE", \
- javax.xml.transform.dom;uses:="javax.xml.transform,org.w3c.dom";version="0.0.0.1_004_J2SE", \
- javax.xml.transform.sax;uses:="org.xml.sax.ext,javax.xml.transform,org.xml.sax,javax.xml.transform.stream";version="0.0.0.1_004_J2SE", \
- javax.xml.transform.stream;uses:="javax.xml.transform";version="0.0.0.1_004_J2SE", \
- javax.xml.transform;version="0.0.0.1_004_J2SE", \
- org.ietf.jgss;version="0.0.0.1_004_J2SE", \
- org.omg.CORBA.DynAnyPackage;uses:="org.omg.CORBA";version="0.0.0.1_004_J2SE", \
- org.omg.CORBA.ORBPackage;uses:="org.omg.CORBA";version="0.0.0.1_004_J2SE", \
- org.omg.CORBA.TypeCodePackage;uses:="org.omg.CORBA";version="0.0.0.1_004_J2SE", \
- org.omg.CORBA.portable;uses:="org.omg.CORBA,org.omg.CORBA_2_3.portable";version="0.0.0.1_004_J2SE", \
- org.omg.CORBA;uses:="org.omg.CORBA.portable,org.omg.CORBA.DynAnyPackage,org.omg.CORBA.ORBPackage,org.omg.CORBA_2_3.portable,org.omg.CORBA.TypeCodePackage";version="0.0.0.1_004_J2SE", \
- org.omg.CORBA_2_3.portable;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.CORBA_2_3;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.CosNaming.NamingContextExtPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.CosNaming.NamingContextPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.CosNaming";version="0.0.0.1_004_J2SE", \
- org.omg.CosNaming;uses:="org.omg.CORBA.portable,org.omg.CORBA,org.omg.PortableServer,org.omg.CosNaming.NamingContextPackage,org.omg.CosNaming.NamingContextExtPackage";version="0.0.0.1_004_J2SE", \
- org.omg.Dynamic;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.DynamicAny.DynAnyFactoryPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.DynamicAny.DynAnyPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.DynamicAny;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.DynamicAny.DynAnyFactoryPackage,org.omg.DynamicAny.DynAnyPackage";version="0.0.0.1_004_J2SE", \
- org.omg.IOP.CodecFactoryPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.IOP.CodecPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.IOP;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.IOP.CodecFactoryPackage,org.omg.IOP.CodecPackage";version="0.0.0.1_004_J2SE", \
- org.omg.Messaging;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.PortableInterceptor.ORBInitInfoPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.PortableInterceptor;uses:="org.omg.CORBA.portable,org.omg.CORBA,org.omg.IOP,org.omg.PortableInterceptor.ORBInitInfoPackage,org.omg.Dynamic";version="0.0.0.1_004_J2SE", \
- org.omg.PortableServer.CurrentPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.PortableServer.POAManagerPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.PortableServer.POAPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.PortableServer.ServantLocatorPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.PortableServer.portable;uses:="org.omg.CORBA,org.omg.PortableServer";version="0.0.0.1_004_J2SE", \
- org.omg.PortableServer;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.PortableServer.CurrentPackage,org.omg.PortableServer.POAManagerPackage,org.omg.PortableServer.POAPackage,org.omg.PortableServer.portable,org.omg.CORBA_2_3,org.omg.PortableServer.ServantLocatorPackage";version="0.0.0.1_004_J2SE", \
- org.omg.SendingContext;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_004_J2SE", \
- org.omg.stub.java.rmi;uses:="javax.rmi.CORBA";version="0.0.0.1_004_J2SE", \
- org.w3c.dom;version="0.0.0.1_004_J2SE", \
- org.xml.sax.ext;uses:="org.xml.sax";version="0.0.0.1_004_J2SE", \
- org.xml.sax.helpers;uses:="org.xml.sax";version="0.0.0.1_004_J2SE", \
- org.xml.sax;version="0.0.0.1_004_J2SE"
+jre-1.7-java-base= \
+ ${dollar}{jre-1.6-java-base}, \
+ java.lang.invoke, \
+ java.nio.file, \
+ java.nio.file.attribute, \
+ java.nio.file.spi
-jre-1.5=, \
- javax.accessibility;uses:="javax.swing.text";version="0.0.0.1_005_J2SE", \
- javax.activity;version="0.0.0.1_005_J2SE", \
- javax.crypto.interfaces;uses:="javax.crypto.spec,javax.crypto";version="0.0.0.1_005_J2SE", \
- javax.crypto.spec;uses:="javax.crypto";version="0.0.0.1_005_J2SE", \
- javax.crypto;uses:="javax.crypto.spec";version="0.0.0.1_005_J2SE", \
- javax.imageio.event;uses:="javax.imageio";version="0.0.0.1_005_J2SE", \
- javax.imageio.metadata;uses:="org.w3c.dom,javax.imageio";version="0.0.0.1_005_J2SE", \
- javax.imageio.plugins.bmp;uses:="javax.imageio";version="0.0.0.1_005_J2SE", \
- javax.imageio.plugins.jpeg;uses:="javax.imageio";version="0.0.0.1_005_J2SE", \
- javax.imageio.spi;uses:="javax.imageio.stream,javax.imageio,javax.imageio.metadata";version="0.0.0.1_005_J2SE", \
- javax.imageio.stream;uses:="javax.imageio";version="0.0.0.1_005_J2SE", \
- javax.imageio;uses:="javax.imageio.metadata,javax.imageio.stream,javax.imageio.spi,javax.imageio.event";version="0.0.0.1_005_J2SE", \
- javax.management.loading;uses:="javax.management";version="0.0.0.1_005_J2SE", \
- javax.management.modelmbean;uses:="javax.management,javax.management.loading";version="0.0.0.1_005_J2SE", \
- javax.management.monitor;uses:="javax.management";version="0.0.0.1_005_J2SE", \
- javax.management.openmbean;uses:="javax.management";version="0.0.0.1_005_J2SE", \
- javax.management.relation;uses:="javax.management";version="0.0.0.1_005_J2SE", \
- javax.management.remote.rmi;uses:="javax.management.remote,javax.security.auth,javax.management,javax.naming,org.omg.CORBA,org.omg.CORBA.portable,javax.rmi,javax.rmi.CORBA";version="0.0.0.1_005_J2SE", \
- javax.management.remote;uses:="javax.security.auth,javax.management";version="0.0.0.1_005_J2SE", \
- javax.management.timer;uses:="javax.management";version="0.0.0.1_005_J2SE", \
- javax.management;uses:="javax.management.loading";version="0.0.0.1_005_J2SE", \
- javax.naming.directory;uses:="javax.naming";version="0.0.0.1_005_J2SE", \
- javax.naming.event;uses:="javax.naming,javax.naming.directory";version="0.0.0.1_005_J2SE", \
- javax.naming.ldap;uses:="javax.naming,javax.naming.directory,javax.net.ssl,javax.naming.event";version="0.0.0.1_005_J2SE", \
- javax.naming.spi;uses:="javax.naming,javax.naming.directory";version="0.0.0.1_005_J2SE", \
- javax.naming;uses:="javax.naming.spi";version="0.0.0.1_005_J2SE", \
- javax.net.ssl;uses:="javax.security.cert,javax.security.auth.x500,javax.net";version="0.0.0.1_005_J2SE", \
- javax.net;version="0.0.0.1_005_J2SE", \
- javax.print.attribute.standard;uses:="javax.print.attribute";version="0.0.0.1_005_J2SE", \
- javax.print.attribute;version="0.0.0.1_005_J2SE", \
- javax.print.event;uses:="javax.print,javax.print.attribute";version="0.0.0.1_005_J2SE", \
- javax.print;uses:="javax.print.attribute,javax.print.event,javax.print.attribute.standard";version="0.0.0.1_005_J2SE", \
- javax.rmi.CORBA;uses:="org.omg.CORBA,org.omg.CORBA_2_3.portable,org.omg.CORBA.portable,org.omg.SendingContext";version="0.0.0.1_005_J2SE", \
- javax.rmi.ssl;uses:="javax.net,javax.net.ssl";version="0.0.0.1_005_J2SE", \
- javax.rmi;uses:="org.omg.CORBA,javax.rmi.CORBA";version="0.0.0.1_005_J2SE", \
- javax.security.auth.callback;version="0.0.0.1_005_J2SE", \
- javax.security.auth.kerberos;uses:="javax.security.auth,javax.crypto";version="0.0.0.1_005_J2SE", \
- javax.security.auth.login;uses:="javax.security.auth,javax.security.auth.callback";version="0.0.0.1_005_J2SE", \
- javax.security.auth.spi;uses:="javax.security.auth.callback,javax.security.auth.login,javax.security.auth";version="0.0.0.1_005_J2SE", \
- javax.security.auth.x500;uses:="javax.security.auth";version="0.0.0.1_005_J2SE", \
- javax.security.auth;version="0.0.0.1_005_J2SE", \
- javax.security.cert;version="0.0.0.1_005_J2SE", \
- javax.security.sasl;uses:="javax.security.auth.callback";version="0.0.0.1_005_J2SE", \
- javax.sound.midi.spi;uses:="javax.sound.midi";version="0.0.0.1_005_J2SE", \
- javax.sound.midi;uses:="javax.sound.midi.spi";version="0.0.0.1_005_J2SE", \
- javax.sound.sampled.spi;uses:="javax.sound.sampled";version="0.0.0.1_005_J2SE", \
- javax.sound.sampled;uses:="javax.sound.sampled.spi";version="0.0.0.1_005_J2SE", \
- javax.sql.rowset.serial;uses:="javax.sql.rowset";version="0.0.0.1_005_J2SE", \
- javax.sql.rowset.spi;uses:="javax.sql,javax.naming,javax.sql.rowset";version="0.0.0.1_005_J2SE", \
- javax.sql.rowset;uses:="javax.sql,javax.sql.rowset.serial,javax.sql.rowset.spi";version="0.0.0.1_005_J2SE", \
- javax.sql;uses:="javax.transaction.xa";version="0.0.0.1_005_J2SE", \
- javax.swing.border;uses:="javax.swing";version="0.0.0.1_005_J2SE", \
- javax.swing.colorchooser;uses:="javax.swing.event,javax.swing,javax.swing.border";version="0.0.0.1_005_J2SE", \
- javax.swing.event;uses:="javax.swing,javax.swing.text,javax.swing.table,javax.swing.tree,javax.swing.undo";version="0.0.0.1_005_J2SE", \
- javax.swing.filechooser;uses:="javax.swing";version="0.0.0.1_005_J2SE", \
- javax.swing.plaf.basic;uses:="javax.swing.border,javax.swing,javax.swing.plaf,javax.swing.text,javax.swing.event,javax.swing.colorchooser,javax.accessibility,javax.swing.filechooser,javax.swing.text.html,javax.sound.sampled,javax.swing.table,javax.swing.tree";version="0.0.0.1_005_J2SE", \
- javax.swing.plaf.metal;uses:="javax.swing.plaf,javax.swing,javax.swing.border,javax.swing.text,javax.swing.plaf.basic,javax.swing.filechooser,javax.swing.event,javax.accessibility,javax.swing.tree";version="0.0.0.1_005_J2SE", \
- javax.swing.plaf.multi;uses:="javax.accessibility,javax.swing,javax.swing.plaf,javax.swing.filechooser,javax.swing.text,javax.swing.tree";version="0.0.0.1_005_J2SE", \
- javax.swing.plaf.synth;uses:="javax.swing,javax.swing.plaf,javax.swing.border,javax.swing.plaf.basic,javax.swing.colorchooser,javax.swing.text,javax.xml.parsers,org.xml.sax,javax.swing.table,javax.swing.tree";version="0.0.0.1_005_J2SE", \
- javax.swing.plaf;uses:="javax.swing,javax.swing.border,javax.accessibility,javax.swing.filechooser,javax.swing.text,javax.swing.tree";version="0.0.0.1_005_J2SE", \
- javax.swing.table;uses:="javax.swing.event,javax.swing.plaf,javax.swing.border,javax.swing,javax.accessibility";version="0.0.0.1_005_J2SE", \
- javax.swing.text.html.parser;uses:="javax.swing.text.html,javax.swing.text";version="0.0.0.1_005_J2SE", \
- javax.swing.text.html;uses:="javax.swing.event,javax.swing.text,javax.accessibility,javax.swing,javax.swing.plaf,javax.swing.border,javax.swing.undo";version="0.0.0.1_005_J2SE", \
- javax.swing.text.rtf;uses:="javax.swing.text";version="0.0.0.1_005_J2SE", \
- javax.swing.text;uses:="javax.swing.event,javax.swing.tree,javax.swing.undo,javax.swing,javax.swing.plaf,javax.swing.plaf.basic,javax.accessibility,javax.swing.text.html";version="0.0.0.1_005_J2SE", \
- javax.swing.tree;uses:="javax.swing.event,javax.swing,javax.swing.border,javax.swing.plaf,javax.swing.plaf.basic";version="0.0.0.1_005_J2SE", \
- javax.swing.undo;uses:="javax.swing,javax.swing.event";version="0.0.0.1_005_J2SE", \
- javax.swing;uses:="javax.swing.event,javax.accessibility,javax.swing.text,javax.swing.plaf,javax.swing.border,javax.swing.tree,javax.swing.table,javax.swing.colorchooser,javax.swing.plaf.basic,javax.swing.text.html,javax.swing.filechooser,javax.print.attribute,javax.swing.plaf.metal";version="0.0.0.1_005_J2SE", \
- javax.transaction.xa;version="0.0.0.1_005_J2SE", \
- javax.transaction;version="0.0.0.1_005_J2SE", \
- javax.xml.datatype;uses:="javax.xml.namespace";version="0.0.0.1_005_J2SE", \
- javax.xml.namespace;version="0.0.0.1_005_J2SE", \
- javax.xml.parsers;uses:="javax.xml.validation,org.w3c.dom,org.xml.sax,org.xml.sax.helpers";version="0.0.0.1_005_J2SE", \
- javax.xml.transform.dom;uses:="javax.xml.transform,org.w3c.dom";version="0.0.0.1_005_J2SE", \
- javax.xml.transform.sax;uses:="org.xml.sax.ext,javax.xml.transform,org.xml.sax,javax.xml.transform.stream";version="0.0.0.1_005_J2SE", \
- javax.xml.transform.stream;uses:="javax.xml.transform";version="0.0.0.1_005_J2SE", \
- javax.xml.transform;version="0.0.0.1_005_J2SE", \
- javax.xml.validation;uses:="org.w3c.dom.ls,javax.xml.transform,javax.xml.transform.stream,org.xml.sax,org.w3c.dom";version="0.0.0.1_005_J2SE", \
- javax.xml.xpath;uses:="org.xml.sax,javax.xml.namespace";version="0.0.0.1_005_J2SE", \
- javax.xml;version="0.0.0.1_005_J2SE", \
- org.ietf.jgss;version="0.0.0.1_005_J2SE", \
- org.omg.CORBA.DynAnyPackage;uses:="org.omg.CORBA";version="0.0.0.1_005_J2SE", \
- org.omg.CORBA.ORBPackage;uses:="org.omg.CORBA";version="0.0.0.1_005_J2SE", \
- org.omg.CORBA.TypeCodePackage;uses:="org.omg.CORBA";version="0.0.0.1_005_J2SE", \
- org.omg.CORBA.portable;uses:="org.omg.CORBA,org.omg.CORBA_2_3.portable";version="0.0.0.1_005_J2SE", \
- org.omg.CORBA;uses:="org.omg.CORBA.portable,org.omg.CORBA.DynAnyPackage,org.omg.CORBA.ORBPackage,org.omg.CORBA_2_3.portable,org.omg.CORBA.TypeCodePackage";version="0.0.0.1_005_J2SE", \
- org.omg.CORBA_2_3.portable;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.CORBA_2_3;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.CosNaming.NamingContextExtPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.CosNaming.NamingContextPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.CosNaming";version="0.0.0.1_005_J2SE", \
- org.omg.CosNaming;uses:="org.omg.CORBA.portable,org.omg.CORBA,org.omg.PortableServer,org.omg.CosNaming.NamingContextPackage,org.omg.CosNaming.NamingContextExtPackage";version="0.0.0.1_005_J2SE", \
- org.omg.Dynamic;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.DynamicAny.DynAnyFactoryPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.DynamicAny.DynAnyPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.DynamicAny;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.DynamicAny.DynAnyFactoryPackage,org.omg.DynamicAny.DynAnyPackage";version="0.0.0.1_005_J2SE", \
- org.omg.IOP.CodecFactoryPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.IOP.CodecPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.IOP;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.IOP.CodecFactoryPackage,org.omg.IOP.CodecPackage";version="0.0.0.1_005_J2SE", \
- org.omg.Messaging;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.PortableInterceptor.ORBInitInfoPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.PortableInterceptor;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.IOP,org.omg.PortableInterceptor.ORBInitInfoPackage,org.omg.CORBA_2_3.portable,org.omg.Dynamic";version="0.0.0.1_005_J2SE", \
- org.omg.PortableServer.CurrentPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.PortableServer.POAManagerPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.PortableServer.POAPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.PortableServer.ServantLocatorPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.PortableServer.portable;uses:="org.omg.CORBA,org.omg.PortableServer";version="0.0.0.1_005_J2SE", \
- org.omg.PortableServer;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.PortableServer.CurrentPackage,org.omg.PortableServer.POAManagerPackage,org.omg.PortableServer.POAPackage,org.omg.PortableServer.portable,org.omg.CORBA_2_3,org.omg.PortableServer.ServantLocatorPackage";version="0.0.0.1_005_J2SE", \
- org.omg.SendingContext;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_005_J2SE", \
- org.omg.stub.java.rmi;uses:="javax.rmi.CORBA";version="0.0.0.1_005_J2SE", \
- org.w3c.dom.bootstrap;uses:="org.w3c.dom";version="0.0.0.1_005_J2SE", \
- org.w3c.dom.events;uses:="org.w3c.dom,org.w3c.dom.views";version="0.0.0.1_005_J2SE", \
- org.w3c.dom.ls;uses:="org.w3c.dom,org.w3c.dom.events,org.w3c.dom.traversal";version="0.0.0.1_005_J2SE", \
- org.w3c.dom;version="0.0.0.1_005_J2SE", \
- org.xml.sax.ext;uses:="org.xml.sax,org.xml.sax.helpers";version="0.0.0.1_005_J2SE", \
- org.xml.sax.helpers;uses:="org.xml.sax";version="0.0.0.1_005_J2SE", \
- org.xml.sax;version="0.0.0.1_005_J2SE"
+jre-1.8-java-base= \
+ ${dollar}{jre-1.7-java-base}, \
+ java.time, \
+ java.time.chrono, \
+ java.time.format, \
+ java.time.temporal, \
+ java.time.zone, \
+ java.util.function, \
+ java.util.stream
-jre-1.6=, \
+jre-1.6= \
+ ${dollar}{jre-1.6-java-base}, \
javax.accessibility;uses:="javax.swing.text";version="0.0.0.1_006_JavaSE", \
javax.activation;version="0.0.0.1_006_JavaSE", \
javax.activity;version="0.0.0.1_006_JavaSE", \
@@ -554,7 +373,8 @@ jre-1.6=, \
org.xml.sax.helpers;uses:="org.xml.sax";version="0.0.0.1_006_JavaSE", \
org.xml.sax;version="0.0.0.1_006_JavaSE"
-jre-1.7=, \
+jre-1.7= \
+ ${dollar}{jre-1.7-java-base}, \
javax.accessibility;uses:="javax.swing.text";version="0.0.0.1_007_JavaSE", \
javax.activation;version="0.0.0.1_007_JavaSE", \
javax.activity;version="0.0.0.1_007_JavaSE", \
@@ -709,7 +529,8 @@ jre-1.7=, \
org.xml.sax.helpers;uses:="org.xml.sax";version="0.0.0.1_007_JavaSE", \
org.xml.sax;version="0.0.0.1_007_JavaSE"
-jre-1.8=, \
+jre-1.8= \
+ ${dollar}{jre-1.8-java-base}, \
javax.accessibility;version="0.0.0.1_008_JavaSE";uses:="javax.swing.text", \
javax.activation;version="0.0.0.1_008_JavaSE", \
javax.activity;version="0.0.0.1_008_JavaSE", \
@@ -739,9 +560,9 @@ jre-1.8=, \
javax.management.relation;version="0.0.0.1_008_JavaSE";uses:="javax.management", \
javax.management.remote;version="0.0.0.1_008_JavaSE";uses:="javax.management,javax.security.auth", \
javax.management.remote.rmi;version="0.0.0.1_008_JavaSE";uses:="javax.management,javax.management.remote,javax.rmi.CORBA,javax.security.auth,org.omg.CORBA,org.omg.CORBA.portable,org.omg.CORBA_2_3.portable", \
- javax.management.timer;version="0.0.0.1_008_JavaSE";uses:="javax.management", \
- javax.naming;version="0.0.0.1_008_JavaSE", \
- javax.naming.directory;version="0.0.0.1_008_JavaSE";uses:="javax.naming", \
+ javax.management.timer;version="0.0.0.1_008_JavaSE";uses:="javax.management", \
+ javax.naming;version="0.0.0.1_008_JavaSE", \
+ javax.naming.directory;version="0.0.0.1_008_JavaSE";uses:="javax.naming", \
javax.naming.event;version="0.0.0.1_008_JavaSE";uses:="javax.naming,javax.naming.directory", \
javax.naming.ldap;version="0.0.0.1_008_JavaSE";uses:="javax.naming,javax.naming.directory,javax.naming.event,javax.net.ssl", \
javax.naming.spi;version="0.0.0.1_008_JavaSE";uses:="javax.naming,javax.naming.directory", \
@@ -865,7 +686,9 @@ jre-1.8=, \
org.xml.sax.ext;version="0.0.0.1_008_JavaSE";uses:="org.xml.sax,org.xml.sax.helpers", \
org.xml.sax.helpers;version="0.0.0.1_008_JavaSE";uses:="org.xml.sax"
-jre-jpms=${dollar}{felix.jpms.felix.default}
+jre-jpms= \
+ ${dollar}{felix.detect.jpms.java} \
+ ${dollar}{felix.jpms.felix.default}
felix.jpms.java.se= \
${dollar}{felix.jpms.${dollar}{felix.detect.jpms.java.base}} \