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

-standalone: true
-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}

-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.enable.builtin=false, \
	osgi.console=, \
	org.apache.felix.http.host=localhost,\
	org.osgi.service.http.port=*

-runbundles: \
	com.fasterxml.jackson.core.jackson-annotations;version='[2.10.1,2.10.2)',\
	com.fasterxml.jackson.core.jackson-core;version='[2.10.1,2.10.2)',\
	com.fasterxml.jackson.core.jackson-databind;version='[2.10.1,2.10.2)',\
	com.fasterxml.jackson.dataformat.jackson-dataformat-yaml;version='[2.10.1,2.10.2)',\
	com.fasterxml.jackson.datatype.jackson-datatype-jsr310;version='[2.10.1,2.10.2)',\
	io.github.classgraph.classgraph;version='[4.6.32,4.6.33)',\
	io.swagger.core.v3.swagger-annotations;version='[2.1.0,2.1.1)',\
	io.swagger.core.v3.swagger-core;version='[2.1.0,2.1.1)',\
	io.swagger.core.v3.swagger-integration;version='[2.1.0,2.1.1)',\
	io.swagger.core.v3.swagger-jaxrs2;version='[2.1.0,2.1.1)',\
	io.swagger.core.v3.swagger-models;version='[2.1.0,2.1.1)',\
	jakarta.xml.bind-api;version='[2.3.3,2.3.4)',\
	javax.validation.api;version='[1.1.0,1.1.1)',\
	org.apache.aries.jax.rs.openapi.itest;version='[1.1.1,1.1.2)',\
	org.apache.aries.jax.rs.openapi.resource;version='[1.1.1,1.1.2)',\
	org.apache.aries.jax.rs.whiteboard;version='[1.1.1,1.1.2)',\
	org.apache.aries.spifly.dynamic.framework.extension;version='[1.3.2,1.3.3)',\
	org.apache.commons.lang3;version='[3.11.0,3.11.1)',\
	org.apache.felix.configadmin;version='[1.9.20,1.9.21)',\
	org.apache.felix.http.jetty;version='[4.1.4,4.1.5)',\
	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.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.24.0,1.24.1)',\
	osgi.enroute.hamcrest.wrapper;version='[1.3.0,1.3.1)',\
	osgi.enroute.junit.wrapper;version='[4.12.0,4.12.1)'

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

-include: -personal.bnd
