#    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

#-runjdb: 8000
#-runtrace: true

-resolve.effective: resolve, active

-runrequires: \
	osgi.identity;filter:='(osgi.identity=com.sun.xml.bind.jaxb-osgi)',\
	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.felix.http.host=localhost,\
	org.osgi.service.http.port=8080,\
	org.apache.aries.spifly.auto.consumers=jakarta.xml.bind-api,\
	org.apache.aries.spifly.auto.providers=com.sun.xml.bind.jaxb-osgi

-runbundles: \
	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='[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.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.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)'

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

-include: -personal.bnd
