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

-runfw: org.eclipse.osgi

#-runjdb: 8000
#-runtrace: true

-resolve.effective: resolve, active

-runrequires: \
	osgi.identity;filter:='(osgi.identity=org.apache.aries.jax.rs.example)',\
	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'

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

-runbundles: \
	com.fasterxml.woodstox.woodstox-core;version='[6.2.3,6.2.4)',\
	com.sun.xml.bind.jaxb-osgi;version='[2.3.3,2.3.4)',\
	jakarta.xml.bind-api;version='[2.3.3,2.3.4)',\
	org.apache.aries.jax.rs.example;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.2,1.3.3)',\
	org.apache.cxf.cxf-core;version='[3.4.2,3.4.3)',\
	org.apache.cxf.cxf-rt-frontend-jaxrs;version='[3.4.2,3.4.3)',\
	org.apache.cxf.cxf-rt-rs-client;version='[3.4.2,3.4.3)',\
	org.apache.cxf.cxf-rt-rs-sse;version='[3.4.2,3.4.3)',\
	org.apache.cxf.cxf-rt-security;version='[3.4.2,3.4.3)',\
	org.apache.cxf.cxf-rt-transports-http;version='[3.4.2,3.4.3)',\
	org.apache.felix.configadmin;version='[1.9.20,1.9.21)',\
	org.apache.felix.gogo.command;version='[1.1.2,1.1.3)',\
	org.apache.felix.gogo.runtime;version='[1.1.4,1.1.5)',\
	org.apache.felix.gogo.shell;version='[1.1.4,1.1.5)',\
	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.felix.scr;version='[2.1.24,2.1.25)',\
	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.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)',\
	stax2-api;version='[4.2.1,4.2.2)'

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

-include: -personal.bnd
