#
# Copyright (c) 2022 Contributors to the Eclipse Foundation
# Copyright (c) 1997-2021 Oracle and/or its affiliates. All rights reserved.
# Copyright 2004 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.
#

# 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.1, \
 org.osgi.framework; version=1.10, \
 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.1, \
 org.osgi.resource.dto; version=1.0.1, \
 org.osgi.service.packageadmin; version=1.2.1, \
 org.osgi.service.resolver; version=1.1.1, \
 org.osgi.service.startlevel; version=1.1.1, \
 org.osgi.service.url; version=1.0.1, \
 org.osgi.util.tracker; version=1.5.3, \
 ${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.
# Then we 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}

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}
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

# Generic execution environment capabilities.
org.osgi.framework.system.capabilities=${eecap-${java.vm.specification.version}}

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"
