#    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=com.sun.xml.bind.jaxb-osgi)',\
	osgi.identity;filter:='(osgi.identity=org.apache.aries.jax.rs.jaxb.json.cxf-jettison-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=*,\
	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.itests-fragment;version='[1.1.1,1.1.2)',\
	org.apache.aries.jax.rs.jaxb.json.cxf-jettison;version='[1.1.1,1.1.2)',\
	org.apache.aries.jax.rs.jaxb.json.cxf-jettison-itest;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.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)',\
	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
