#    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=1.7.25,\
	org.slf4j.event;version=1.7.25,\
	org.slf4j.helpers;version=1.7.25,\
	org.slf4j.spi;version=1.7.25,\
	${bndjava15temorarysupplementalpackages}

-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.0.3,1.0.4)',\
	org.apache.aries.jax.rs.openapi.resource;version='[1.0.3,1.0.4)',\
	org.apache.aries.jax.rs.whiteboard;version='[1.0.9,1.0.10)',\
	org.apache.aries.spifly.dynamic.framework.extension;version='[1.3.0,1.3.1)',\
	org.apache.commons.lang3;version='[3.10.0,3.10.1)',\
	org.apache.felix.configadmin;version='[1.8.14,1.8.15)',\
	org.apache.felix.http.jetty;version='[4.0.8,4.0.9)',\
	org.apache.felix.http.servlet-api;version='[1.1.2,1.1.3)',\
	org.apache.geronimo.specs.geronimo-annotation_1.3_spec;version='[1.1.0,1.1.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.0,1.1.1)',\
	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)'

-include: -personal.bnd
