# Copyright (c) 2010-2021 Oracle and/or its affiliates. All rights reserved.
# Copyright 2018 The Apache Software Foundation
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#



#
# Framework config properties.
#

# Packages exported by system bundle when framework is Felix.
# Unlike Equinox, Felix requires us to list all packages from felix.jar
# while using org.osgi.framework.system.packages property.
Felix.system.packages=\
 org.osgi.dto; version=1.1, \
 org.osgi.framework; version=1.9, \
 org.osgi.framework.dto; version=1.8, \
 org.osgi.framework.hooks.bundle; version=1.1, \
 org.osgi.framework.hooks.resolver; version=1.0, \
 org.osgi.framework.hooks.service; version=1.1, \
 org.osgi.framework.hooks.weaving; version=1.1, \
 org.osgi.framework.launch; version=1.2, \
 org.osgi.framework.namespace; version=1.1, \
 org.osgi.framework.startlevel; version=1.0, \
 org.osgi.framework.startlevel.dto; version=1.0, \
 org.osgi.framework.wiring; version=1.2, \
 org.osgi.framework.wiring.dto; version=1.3, \
 org.osgi.resource; version=1.0, \
 org.osgi.resource.dto; version=1.0, \
 org.osgi.service.packageadmin; version=1.2, \
 org.osgi.service.resolver; version=1.1, \
 org.osgi.service.startlevel; version=1.1, \
 org.osgi.service.url; version=1.0, \
 org.osgi.util.tracker; version=1.5.2, \
 ${extra-system-packages}



# Packages exported by system bundle when framework is Equinox.
# Unlike Felix, It is not required to explicitly mention the packages exported by equinox framework jar.
# Equinox automatically adds packages from equinox.jar to exported package list.
Equinox.system.packages=${extra-system-packages}

# Packages exported by system bundle when framework is Knopflerfish.
# Taken from MANIFEST.MF of framework.jar distributed with Knopflerfish 3.5.0.
# Like Felix, this also requires OSGi packages to be listed unless we use
# org.osgi.framework.system.packages.extra property.
Knopflerfish.system.packages=\
 org.osgi.framework;version=1.5, \
 org.osgi.framework.launch;version=1.0, \
 org.osgi.framework.hooks.service;version=1.0, \
 org.osgi.service.packageadmin;version=1.2, \
 org.osgi.service.permissionadmin;version=1.2, \
 org.osgi.util.tracker;version=1.4, \
 org.osgi.service.startlevel;version=1.1, \
 org.osgi.service.url;version=1.0, \
 org.osgi.service.condpermadmin;version=1.1, \
 ${extra-system-packages}


# As much as we prefer system.packages.extra to system.packages, we are forced to
# configure system bundle using system.packages property because neither
# Equinox nor Knopflerfish have the correct list of Java SE packages. Only
# Felix has it after we supplied them the patch. It's a pity that something like
# Java SE package list is not correctly set by various framework vendors correctly.
org.osgi.framework.system.packages=${${GlassFish_Platform}.system.packages}

# embeddable package version must match what is found in core/bootstrap/osgi.bundle file. See that file more details.
extra-system-packages=${jre-${java.specification.version}}, org.glassfish.embeddable;org.glassfish.embeddable.spi;version=3.1.1

# Although Eclipselink imports these packages, in typical GlassFish installation,
# Oracle JDBC driver may not be available as a bundle, so we ask user to install it in
# java.ext.dirs and the bootdelegation helps there.
eclipselink.bootdelegation=oracle.sql, oracle.sql.*

# There is no need to use bootdelegation except for the following issues:
# 1. EclipseLink
# 4. NetBeans profiler packages exist in parent class loader (see issue #8612)
# 5. BTrace exists in bootclasspath.
org.osgi.framework.bootdelegation=${eclipselink.bootdelegation}, \
                                  org.netbeans.lib.profiler, org.netbeans.lib.profiler.*, \
                                  jakarta.xml.bind, \
                                  jakarta.xml.bind.annotation, \
                                  jakarta.xml.bind.annotation.adapters, \
                                  jakarta.xml.bind.attachment, \
                                  jakarta.xml.bind.helpers, \
                                  jakarta.xml.bind.util

# The OSGi R4.2 spec says boot delegation uses the boot class loader by default. We need
# to configure it to use the framework class loader because that class loader is
# configured with extra classes like jdk tools.jar, derby jars, etc. that must be
# made available in GlassFish to work.
org.osgi.framework.bundle.parent=framework

# We don't set this value here, as expanding GlassFish_Platform gives us a file name with upper case
# char in it. GlassFish file layout does not recommend use of upper case char, because some
# platforms like Windows don't honor case in file names. So, we don't set the cache dir here.
# Instead, it is set in various PlatformHelper implementations.
#org.osgi.framework.storage=${com.sun.aas.instanceRoot}/osgi-cache/${GlassFish_Platform}/
# See GLASSFISH-19624 as to why we always clean the cache on Knopflerfish.
Knopflerfish.storage.clean=onFirstInit
org.osgi.framework.storage.clean=${${GlassFish_Platform}.storage.clean}

# Are we using ondemand provisioning of OSGi modules? default is false.
glassfish.osgi.ondemand=false

# Is OBR enabled?
com.sun.enterprise.hk2.obrEnabled=${glassfish.osgi.ondemand}

# Directory containing all the modules.
com.sun.enterprise.hk2.repositories=${com.sun.aas.installRootURI}/modules/

# Should the repo be synchronously initialized. Default is true to avoid any potential race condition.
# However, we should eventually set it to false to minimize impact on start up time.
com.sun.enterprise.hk2.initializeRepoSynchronously=true

# Should fragments be deployed? default is false.
com.sun.enterprise.hk2.obrDeploysFragments=false

# Should OBR deploy optional requirements
com.sun.enterprise.hk2.obrDeploysOptionalRequirements=true

# Is Obr cached in serialized format? Default is false in which case XML format is used.
com.sun.enterprise.hk2.obrIsSerialized=false

# This is where we cache the inhabitants information
com.sun.enterprise.hk2.cacheDir=${org.osgi.framework.storage}

# Important Note about glassfish.osgi.auto.* properties.
#
# These properties are interpreted by our autoprocessor to install and start the configured list of bundles.
# There are three properties:
# glassfish.osgi.auto.install, glassfish.osgi.auto.start, glassfish.osgi.auto.start.level[.N]
# to control what gets installed in which order, what gets started and what should be the bundle's start level.
# glassfish.osgi.auto.install is used to configure a list of locations from where bundles will be installed.
# The order is important as bundle installation order is an input to package resolution process in OSGi.
#
# We first start osgi-resource-locator bundle as osgi-adapter depends on it being active.
# Since Felix starts bundles with same start level in the order in which bundles are installed,
# and osgi-adapter and osgi-resource-locator both have same start level of 1, to make sure
# osgi-resource-locator starts ahead of osgi-adapter, we install it ahead of osgi-adapter as well.
#
# TODO: We should fix it by using different start levels, but at this point we can't change
# the start levels, as we have already documented the start levels shell bundles in public documents.
# When we change that, we shall change here as well.
# Then we autostart GlassFish core bundles followed by optional services.
# The reason for using installRootURI is to make sure any char like white space is properly encoded.
glassfish.osgi.auto.install=\
 ${com.sun.aas.installRootURI}modules/osgi-resource-locator.jar \
 ${com.sun.aas.installRootURI}modules/ \
 ${com.sun.aas.installRootURI}modules/autostart/

# This bundle is only needed to be activated if we want to use ondemqand mode.
# Since ondemand mode is not the default mode, we don't activate it by default
# to save time and space. Let it be defined explicitly when we need ondemand support.
# We have already added necessary support to easily set a property while launching
# from command line or via domain.xml.
#obr.bundles=${com.sun.aas.installRootURI}modules/org.apache.felix.bundlerepository.jar

hk2.bundles=\
 ${com.sun.aas.installRootURI}modules/hk2-api.jar \
 ${com.sun.aas.installRootURI}modules/hk2-utils.jar \
 ${com.sun.aas.installRootURI}modules/jakarta.inject-api.jar \
 ${com.sun.aas.installRootURI}modules/osgi-resource-locator.jar \
 ${com.sun.aas.installRootURI}modules/hk2-locator.jar \
 ${com.sun.aas.installRootURI}modules/hk2-runlevel.jar \
 ${com.sun.aas.installRootURI}modules/hk2-config.jar \
 ${com.sun.aas.installRootURI}modules/config-types.jar \
 ${com.sun.aas.installRootURI}modules/hibernate-validator.jar \
 ${com.sun.aas.installRootURI}modules/class-model.jar \
 ${com.sun.aas.installRootURI}modules/asm.jar \
 ${com.sun.aas.installRootURI}modules/asm-analysis.jar \
 ${com.sun.aas.installRootURI}modules/asm-commons.jar \
 ${com.sun.aas.installRootURI}modules/asm-tree.jar \
 ${com.sun.aas.installRootURI}modules/asm-util.jar \
 ${com.sun.aas.installRootURI}modules/osgi-adapter.jar

core.bundles=\
 ${hk2.bundles} \
 ${com.sun.aas.installRootURI}modules/glassfish.jar

autostart.bundles=${com.sun.aas.installRootURI}modules/autostart/

# This property is used to configure a list of bundles to be started by our autoprocessor.
# Eventual activation of the bundles depend on bundle's start level and activation policy.
glassfish.osgi.auto.start=\
 ${core.bundles} \
 ${autostart.bundles}

# List of bundles whose start level is 1
glassfish.osgi.auto.start.level.1=${core.bundles}

# List of bundles whose start level is 2
# For start up performance, we don't start optional bundles before start level 2.
glassfish.osgi.auto.start.level.2=${autostart.bundles}

# Final start level of OSGi framework. This is used by GlassFish launcher code
# to set the start level of the OSGi framework once server is up and running so that
# optional services can start. The initial start level of framework is controlled using
# the standard framework property called org.osgi.framework.startlevel.beginning
glassfish.osgi.start.level.final=2

# What should be the initial start level of framework.
# For performance reason, initially we set the start level to 1 so that no optional
# bundles can get activated while server is still starting. Once server is started,
# the framework's start level is set to whatever is configured in glassfish.osgi.start.level.final property.
org.osgi.framework.startlevel.beginning=1

# Set bundle start level to be same or less than that of framework,
# otherwise HK2 installed bundles won't be activated.
# See issue #5934
felix.startlevel.bundle=1

# log level 1: error, 2: warning, 3: info, 4: debug
felix.log.level=1

# The Felix launcher registers a shutdown hook to cleanly stop the framework
# by default, uncomment the following line to disable it.
# Since, GlassFish uses its own shutdown hook to stop the framework, we don't need this.
felix.shutdown.hook=false

#felix.service.urlhandlers=false

# Should OSGi bundles inherit permissions from JDK security manager policy configuration?
# Set it to true if you waant them to. Default is false for backward compatibility reasons.
felix.security.defaultpolicy=true

# See equinox bug #329314
osgi.resolver.preferSystemPackages=false

# See equinox bug #344850
osgi.compatibility.bootdelegation=false

#
# Java SE 6 platform packages. Taken from: http://java.sun.com/javase/6/docs/api/
# Don't add/remove any new package unless you find bugs.
# Since we don't know the actual package versions,
# we export most of them with default version.
jre-1.6=\
 javax.accessibility, \
 javax.activation, \
 javax.activity, \
 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.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.spi, \
 javax.net, \
 javax.net.ssl, \
 javax.print, \
 javax.print.attribute, \
 javax.print.attribute.standard, \
 javax.print.event, \
 javax.rmi, \
 javax.rmi.CORBA, \
 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.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.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, \
 jakarta.transaction; javax.transaction.xa, \
 javax.xml, \
 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.soap, \
 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, \
 org.ietf.jgss, \
 org.omg.CORBA, \
 org.omg.CORBA.DynAnyPackage, \
 org.omg.CORBA.ORBPackage, \
 org.omg.CORBA.TypeCodePackage, \
 org.omg.CORBA.portable, \
 org.omg.CORBA_2_3, \
 org.omg.CORBA_2_3.portable, \
 org.omg.CosNaming, \
 org.omg.CosNaming.NamingContextExtPackage, \
 org.omg.CosNaming.NamingContextPackage, \
 org.omg.Dynamic, \
 org.omg.DynamicAny, \
 org.omg.DynamicAny.DynAnyFactoryPackage, \
 org.omg.DynamicAny.DynAnyPackage, \
 org.omg.IOP, \
 org.omg.IOP.CodecFactoryPackage, \
 org.omg.IOP.CodecPackage, \
 org.omg.Messaging, \
 org.omg.PortableInterceptor, \
 org.omg.PortableInterceptor.ORBInitInfoPackage, \
 org.omg.PortableServer, \
 org.omg.PortableServer.CurrentPackage, \
 org.omg.PortableServer.POAManagerPackage, \
 org.omg.PortableServer.POAPackage, \
 org.omg.PortableServer.ServantLocatorPackage, \
 org.omg.PortableServer.portable, \
 org.omg.SendingContext, \
 org.w3c.dom, \
 org.w3c.dom.bootstrap, \
 org.w3c.dom.events, \
 org.w3c.dom.ls, \
 org.xml.sax, \
 org.xml.sax.ext, \
 org.xml.sax.helpers, ${endorsed-standard-packages}

# These are no longer endorsed packages. Remove from here?
endorsed-standard-packages=\
 javax.annotation, \
 javax.xml.bind, \
 javax.xml.bind.annotation, \
 javax.xml.bind.annotation.adapters, \
 javax.xml.bind.attachment, \
 javax.xml.bind.helpers, \
 javax.xml.bind.util, \
 jakarta.jws, \
 jakarta.jws.soap, \
 jakarta.xml.ws, \
 jakarta.xml.ws.handler, \
 jakarta.xml.ws.handler.soap, \
 jakarta.xml.ws.http, \
 jakarta.xml.ws.soap, \
 jakarta.xml.ws.spi, \
 jakarta.xml.ws.wsaddressing

#dtrace support
# TODO: We still need to add appropriate SE packages for 7, 8, 9, 10, 11, 12, 13, 14, 15 and 16 and beyond
# Note with the current code we must have on entry for each JDK
jre-1.7=${jre-1.6},com.sun.tracing
jre-1.8=${jre-1.7},javafx.application,javafx.beans.property,javafx.beans.value,javax.money
jre-9=${jre-1.8},jdk,jdk.security,jdk.security.jarsigner
jre-10=${jre-9}
jre-11=\
 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.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.spi, \
 javax.net, \
 javax.net.ssl, \
 javax.print, \
 javax.print.attribute, \
 javax.print.attribute.standard, \
 javax.print.event, \
 javax.rmi, \
 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.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, \
 org.ietf.jgss, \
 org.w3c.dom, \
 org.w3c.dom.bootstrap, \
 org.w3c.dom.events, \
 org.w3c.dom.ls, \
 org.xml.sax, \
 org.xml.sax.ext, \
 org.xml.sax.helpers, \
 com.sun.tracing, \
 jdk, \
 jdk.security, \
 jdk.security.jarsigner
 jre-12=${jre-11}
 jre-13=${jre-11}
 jre-14=${jre-11}
 jre-15=${jre-11}
 jre-16=${jre-11}
 jre-17=${jre-11}
 jre-18=${jre-11}
 jre-19=${jre-11}
 jre-20=${jre-11}
 jre-21=${jre-11}

# Bundle information optimization to improve performance
felix.cache.singlebundlefile=true

# Set this to true if you want to use JPA in Java SE mode in your OSGi bundles.
# See GLASSFISH-14134 for more details.
org.glassfish.osgjpa.extension.useHybridPersistenceProviderResolver=false

# When HybridPersistenceProviderResolver is used, it can be configured to use a cache.
# Setting the next property to false, disables caching of providers.
org.glassfish.osgjpa.extension.hybridPersistenceProviderResolver.cachingEnabled=true

# We have stopped using FileInstall to monitor autostart/. Because we can't change domain.xml
# in 3.1.1, we have to rely on configuring FileInstall using this file.
felix.fileinstall.dir=${com.sun.aas.instanceRoot}/autodeploy/bundles/
felix.fileinstall.poll=5000
felix.fileinstall.log.level=3
felix.fileinstall.bundles.new.start=true
felix.fileinstall.bundles.startTransient=true
felix.fileinstall.disableConfigSave=false

# If we don't set this, when we run our tests in embedded mode, gogo shell stops the framework after running the login command.
gosh.args=--nointeractive

# New-style generic execution environment capabilities.
#fix for GLASSFISH-21236
org.osgi.framework.system.capabilities= \
 ${eecap-${java.specification.version}}
 #we are adding eecap entries upto 1.7 as GF is not supported for JDK<1.7 (?)
eecap-21= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13,14,15,16,17,18,19,20,21"
eecap-20= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13,14,15,16,17,18,19,20"
eecap-19= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13,14,15,16,17,18,19"
eecap-18= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13,14,15,16,17,18"
eecap-17= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13,14,15,16,17"
eecap-16= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13,14,15,16"
eecap-15= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13,14,15"
eecap-14= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13,14"
eecap-13= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12,13"
eecap-12= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11,12"
eecap-11= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10,11"
eecap-10= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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,10"
eecap-9= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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"
eecap-1.8= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 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"
eecap-1.7= osgi.ee; osgi.ee="OSGi/Minimum"; version:List<Version>="1.0,1.1,1.2", \
 osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7"
