#    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.

-runpath: \
	ch.qos.logback.classic,\
	ch.qos.logback.core,\
	org.apache.felix.logback,\
	slf4j.api
-runsystempackages: \
	org.slf4j;version=${slf4j.version},\
	org.slf4j.event;version=${slf4j.version},\
	org.slf4j.helpers;version=${slf4j.version},\
	org.slf4j.spi;version=${slf4j.version}

-runblacklist: \
	osgi.identity;filter:='(&(osgi.identity=org.apache.commons.lang3)(version<3.7))'

-runfw: org.eclipse.osgi

-resolve.effective: resolve, active

-runrequires: \
	osgi.identity;filter:='(osgi.identity=org.apache.aries.jax.rs.openapi.resource)',\
	osgi.identity;filter:='(osgi.identity=org.apache.aries.jax.rs.openapi.itest)'

-runsystemcapabilities: ${native_capability}
-runproperties: \
	logback.configurationFile=file:${.}/logback.xml,\
	osgi.console=, \
	org.apache.cxf.osgi.http.transport.disable=true,\
	org.apache.felix.http.host=localhost,\
	org.osgi.service.http.port=*,\
	org.apache.aries.spifly.auto.consumers=jakarta.*,\
	org.apache.aries.spifly.auto.providers=com.sun.*

-runbundles: \
	com.fasterxml.jackson.core.jackson-annotations;version='[2.12.1,2.12.2)',\
	com.fasterxml.jackson.core.jackson-core;version='[2.12.1,2.12.2)',\
	com.fasterxml.jackson.core.jackson-databind;version='[2.12.1,2.12.2)',\
	com.fasterxml.jackson.dataformat.jackson-dataformat-yaml;version='[2.12.1,2.12.2)',\
	com.fasterxml.jackson.datatype.jackson-datatype-jsr310;version='[2.12.1,2.12.2)',\
	com.fasterxml.woodstox.woodstox-core;version='[6.2.4,6.2.5)',\
	com.sun.istack.commons-runtime;version='[3.0.11,3.0.12)',\
	com.sun.xml.bind.jaxb-osgi;version='[2.3.3,2.3.4)',\
	io.github.classgraph.classgraph;version='[4.8.95,4.8.96)',\
	io.swagger.core.v3.swagger-annotations;version='[2.1.7,2.1.8)',\
	io.swagger.core.v3.swagger-core;version='[2.1.7,2.1.8)',\
	io.swagger.core.v3.swagger-integration;version='[2.1.7,2.1.8)',\
	io.swagger.core.v3.swagger-jaxrs2;version='[2.1.7,2.1.8)',\
	io.swagger.core.v3.swagger-models;version='[2.1.7,2.1.8)',\
	jakarta.validation.jakarta.validation-api;version='[2.0.2,2.0.3)',\
	jakarta.xml.bind-api;version='[2.3.3,2.3.4)',\
	org.apache.aries.component-dsl.component-dsl;version='[1.2.2,1.2.3)',\
	org.apache.aries.jax.rs.openapi.itest;version='[2.0.0,2.0.1)',\
	org.apache.aries.jax.rs.openapi.resource;version='[2.0.0,2.0.1)',\
	org.apache.aries.jax.rs.whiteboard;version='[2.0.0,2.0.1)',\
	org.apache.aries.spifly.dynamic.framework.extension;version='[1.3.3,1.3.4)',\
	org.apache.commons.lang3;version='[3.12.0,3.12.1)',\
	org.apache.cxf.cxf-core;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-frontend-jaxrs;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-rs-client;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-rs-sse;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-security;version='[3.4.3,3.4.4)',\
	org.apache.cxf.cxf-rt-transports-http;version='[3.4.3,3.4.4)',\
	org.apache.felix.configadmin;version='[1.9.20,1.9.21)',\
	org.apache.felix.http.jetty;version='[4.1.6,4.1.7)',\
	org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
	org.apache.geronimo.specs.geronimo-annotation_1.3_spec;version='[1.3.0,1.3.1)',\
	org.apache.geronimo.specs.geronimo-jaxrs_2.1_spec;version='[1.1.0,1.1.1)',\
	org.apache.servicemix.bundles.junit;version='[4.13.0,4.13.1)',\
	org.apache.ws.xmlschema.core;version='[2.2.5,2.2.6)',\
	org.osgi.service.jaxrs;version='[1.0.0,1.0.1)',\
	org.osgi.util.function;version='[1.1.0,1.1.1)',\
	org.osgi.util.promise;version='[1.1.1,1.1.2)',\
	org.yaml.snakeyaml;version='[1.27.0,1.27.1)',\
	stax2-api;version='[4.2.1,4.2.2)'

-runstartlevel: \
	order=sortbynameversion,\
	begin=-1

-include: -personal.bnd
