Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [equinox-dev] How does Equinox infer systemCapabilities without .profile files?

Mickael,

It mostly starts here:

  org.eclipse.osgi.storage.Storage.findVMProfile(Generation)

For Java 9 and higher it ends up here:

  org.eclipse.osgi.storage.Storage.calculateVMProfile(Version)

While prototyping generating a profile I wrote some horrible code like this, using reflection to get at private things.

  public void generateSelfProfile(File profileFolder) throws IOException
  {
    Bundle bundle = P2CorePlugin.INSTANCE.getBundle();
    Object container = ReflectUtil.invokeMethod("getEquinoxContainer", bundle);
    Storage storage = ReflectUtil.invokeMethod("getStorage", container);
    ReflectUtil.setValue("runtimeVersion", storage, org.osgi.framework.Version.valueOf("1.5.0"));
    ReflectUtil.setValue("javaSpecVersion", storage, "1.5");
    org.osgi.framework.Version runtimeVersion = ReflectUtil.invokeMethod("getRuntimeVersion", storage);
    BundleInfo info = new BundleInfo(storage, 0, Constants.SYSTEM_BUNDLE_LOCATION, 0);
    Generation generation = ReflectUtil.invokeMethod("createGeneration", info);
    Properties profileProperties = ReflectUtil.invokeMethod(ReflectUtil.getMethod(storage, "findVMProfile", Generation.class), storage, generation);

    int major = runtimeVersion.getMajor();
    String profileName = "JavaSE-" + (major == 1 ? "1." + runtimeVersion.getMinor() : Integer.toString(major)) + ".profile";

    File profileFile = new File(profileFolder, profileName);
    PrintStream profileOut = new PrintStream(profileFile, "8859_1");

    String systemCapabilities = profileProperties.getProperty(Constants.FRAMEWORK_SYSTEMCAPABILITIES);
    profileOut.println(Constants.FRAMEWORK_SYSTEMCAPABILITIES + "=\\");
    profileOut.print(' ');
    profileOut.println(systemCapabilities.replace("\", ", "\",").replace("\",", "\",\\" + System.lineSeparator() + " "));

    String frameworkPackages = profileProperties.getProperty(Constants.FRAMEWORK_SYSTEMPACKAGES);
    profileOut.println(Constants.FRAMEWORK_SYSTEMPACKAGES + "=\\");
    profileOut.print(' ');
    profileOut.println(frameworkPackages.replace(", ", ",").replace(",", ",\\" + System.lineSeparator() + " "));

    profileOut.close();
  }

This was in a launched application that was launched with the actual JVM for which the profile is to be generated and then uses OSGi to compute what was previously actually loaded from a *.profile for < Java 9.

I've attached the Java14 profile that the above computes.  I have a collection of them for Java 1.5 through 14; though of course the < 9 are just exactly what OSGi used to keep in *.profile files.

Regards,
Ed


On 16.07.2020 11:35, Mickael Istria wrote:
Hi all,

I've been deep into Tycho these days, and we managed recently to stop hardcoding the system.packages in .profile files, that's a good thing!
However, we still need those profile files for newer Java versions (JavaSE-14 and so on) because they are storing the system capabilities (eg osgi.ee: JavaSE/14.0.0). I see Equinox doesn't use those profile files at all nowadays for newer Java versions, so I imagine there is a way to dynamically get those system capabilities, and Tycho should just try to use the same strategie instead of hardcoding them. I tried to find where in the code this "inference" of system capabilities is done but didn't spot where the magic happens.
Can someone please give me a hint about where to find the code that does that?
Thanks in advance!

--
Mickael Istria
Eclipse IDE developer, for Red Hat Developers

_______________________________________________
equinox-dev mailing list
equinox-dev@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/equinox-dev
org.osgi.framework.system.capabilities=\
 osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0, 1.1, 1.2",\
 osgi.ee; osgi.ee="JRE"; version:List<Version>="1.0, 1.1",\
 osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0",\
 osgi.ee; osgi.ee="JavaSE/compact1"; version:List<Version>="1.8, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0",\
 osgi.ee; osgi.ee="JavaSE/compact2"; version:List<Version>="1.8, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0",\
 osgi.ee; osgi.ee="JavaSE/compact3"; version:List<Version>="1.8, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0"
org.osgi.framework.system.packages=\
 com.sun.java.accessibility.util,\
 com.sun.management,\
 com.sun.net.httpserver,\
 com.sun.net.httpserver.spi,\
 com.sun.nio.file,\
 com.sun.nio.sctp,\
 com.sun.security.auth,\
 com.sun.security.auth.callback,\
 com.sun.security.auth.login,\
 com.sun.security.auth.module,\
 com.sun.security.jgss,\
 com.sun.source.doctree,\
 com.sun.source.tree,\
 com.sun.source.util,\
 com.sun.tools.javac,\
 java.applet,\
 java.awt,\
 java.awt.color,\
 java.awt.datatransfer,\
 java.awt.desktop,\
 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.constant,\
 java.lang.instrument,\
 java.lang.invoke,\
 java.lang.management,\
 java.lang.module,\
 java.lang.ref,\
 java.lang.reflect,\
 java.lang.runtime,\
 java.math,\
 java.net,\
 java.net.http,\
 java.net.spi,\
 java.nio,\
 java.nio.channels,\
 java.nio.channels.spi,\
 java.nio.charset,\
 java.nio.charset.spi,\
 java.nio.file,\
 java.nio.file.attribute,\
 java.nio.file.spi,\
 java.rmi,\
 java.rmi.activation,\
 java.rmi.dgc,\
 java.rmi.registry,\
 java.rmi.server,\
 java.security,\
 java.security.cert,\
 java.security.interfaces,\
 java.security.spec,\
 java.sql,\
 java.text,\
 java.text.spi,\
 java.time,\
 java.time.chrono,\
 java.time.format,\
 java.time.temporal,\
 java.time.zone,\
 java.util,\
 java.util.concurrent,\
 java.util.concurrent.atomic,\
 java.util.concurrent.locks,\
 java.util.function,\
 java.util.jar,\
 java.util.logging,\
 java.util.prefs,\
 java.util.regex,\
 java.util.spi,\
 java.util.stream,\
 java.util.zip,\
 javax.accessibility,\
 javax.annotation.processing,\
 javax.crypto,\
 javax.crypto.interfaces,\
 javax.crypto.spec,\
 javax.imageio,\
 javax.imageio.event,\
 javax.imageio.metadata,\
 javax.imageio.plugins.bmp,\
 javax.imageio.plugins.jpeg,\
 javax.imageio.plugins.tiff,\
 javax.imageio.spi,\
 javax.imageio.stream,\
 javax.lang.model,\
 javax.lang.model.element,\
 javax.lang.model.type,\
 javax.lang.model.util,\
 javax.management,\
 javax.management.loading,\
 javax.management.modelmbean,\
 javax.management.monitor,\
 javax.management.openmbean,\
 javax.management.relation,\
 javax.management.remote,\
 javax.management.remote.rmi,\
 javax.management.timer,\
 javax.naming,\
 javax.naming.directory,\
 javax.naming.event,\
 javax.naming.ldap,\
 javax.naming.ldap.spi,\
 javax.naming.spi,\
 javax.net,\
 javax.net.ssl,\
 javax.print,\
 javax.print.attribute,\
 javax.print.attribute.standard,\
 javax.print.event,\
 javax.rmi.ssl,\
 javax.script,\
 javax.security.auth,\
 javax.security.auth.callback,\
 javax.security.auth.kerberos,\
 javax.security.auth.login,\
 javax.security.auth.spi,\
 javax.security.auth.x500,\
 javax.security.cert,\
 javax.security.sasl,\
 javax.smartcardio,\
 javax.sound.midi,\
 javax.sound.midi.spi,\
 javax.sound.sampled,\
 javax.sound.sampled.spi,\
 javax.sql,\
 javax.sql.rowset,\
 javax.sql.rowset.serial,\
 javax.sql.rowset.spi,\
 javax.swing,\
 javax.swing.border,\
 javax.swing.colorchooser,\
 javax.swing.event,\
 javax.swing.filechooser,\
 javax.swing.plaf,\
 javax.swing.plaf.basic,\
 javax.swing.plaf.metal,\
 javax.swing.plaf.multi,\
 javax.swing.plaf.nimbus,\
 javax.swing.plaf.synth,\
 javax.swing.table,\
 javax.swing.text,\
 javax.swing.text.html,\
 javax.swing.text.html.parser,\
 javax.swing.text.rtf,\
 javax.swing.tree,\
 javax.swing.undo,\
 javax.tools,\
 javax.transaction.xa,\
 javax.xml,\
 javax.xml.catalog,\
 javax.xml.crypto,\
 javax.xml.crypto.dom,\
 javax.xml.crypto.dsig,\
 javax.xml.crypto.dsig.dom,\
 javax.xml.crypto.dsig.keyinfo,\
 javax.xml.crypto.dsig.spec,\
 javax.xml.datatype,\
 javax.xml.namespace,\
 javax.xml.parsers,\
 javax.xml.stream,\
 javax.xml.stream.events,\
 javax.xml.stream.util,\
 javax.xml.transform,\
 javax.xml.transform.dom,\
 javax.xml.transform.sax,\
 javax.xml.transform.stax,\
 javax.xml.transform.stream,\
 javax.xml.validation,\
 javax.xml.xpath,\
 jdk.dynalink,\
 jdk.dynalink.beans,\
 jdk.dynalink.linker,\
 jdk.dynalink.linker.support,\
 jdk.dynalink.support,\
 jdk.jfr,\
 jdk.jfr.consumer,\
 jdk.management.jfr,\
 jdk.nashorn.api.scripting,\
 jdk.nashorn.api.tree,\
 jdk.net,\
 jdk.nio,\
 jdk.nio.mapmode,\
 netscape.javascript,\
 org.ietf.jgss,\
 org.w3c.dom,\
 org.w3c.dom.bootstrap,\
 org.w3c.dom.css,\
 org.w3c.dom.events,\
 org.w3c.dom.html,\
 org.w3c.dom.ls,\
 org.w3c.dom.ranges,\
 org.w3c.dom.stylesheets,\
 org.w3c.dom.traversal,\
 org.w3c.dom.views,\
 org.w3c.dom.xpath,\
 org.xml.sax,\
 org.xml.sax.ext,\
 org.xml.sax.helpers,\
 sun.misc,\
 sun.reflect

Back to the top