[
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!
_______________________________________________
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