#    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

-runee: JavaSE-${java.specification.version}

#-runjdb: 8000
#-runtrace: true

-resolve.effective: resolve, active

java.8.reqs: \
	osgi.identity;filter:='(osgi.identity=${project.artifactId}-tests)',\
	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'

java.9.plus.reqs: \
	${java.8.reqs},\
	osgi.identity;filter:='(osgi.identity=com.sun.xml.bind.jaxb-osgi)'

-runrequires: ${if;${is;${def;-runee};JavaSE-1.8};${java.8.reqs};${java.9.plus.reqs}}

-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=*,\
	org.apache.aries.spifly.auto.consumers=jakarta.*,\
	org.apache.aries.spifly.auto.providers=com.sun.*

-runbundles: \
	assertj-core;version='[3.23.1,3.23.2)',\
	com.fasterxml.woodstox.woodstox-core;version='[6.4.0,6.4.1)',\
	com.sun.xml.bind.jaxb-osgi;version='[2.3.3,2.3.4)',\
	jakarta.activation-api;version='[1.2.2,1.2.3)',\
	jakarta.annotation-api;version='[1.3.5,1.3.6)',\
	jakarta.xml.bind-api;version='[2.3.3,2.3.4)',\
	jakarta.xml.soap-api;version='[1.4.2,1.4.3)',\
	jakarta.xml.ws-api;version='[2.3.3,2.3.4)',\
	net.bytebuddy.byte-buddy;version='[1.12.10,1.12.11)',\
	org.apache.aries.component-dsl.component-dsl;version='[1.2.2,1.2.3)',\
	org.apache.aries.jax.rs.itests-tests;version='[2.0.2,2.0.3)',\
	org.apache.aries.jax.rs.whiteboard;version='[2.0.2,2.0.3)',\
	org.apache.aries.spifly.dynamic.framework.extension;version='[1.3.6,1.3.7)',\
	org.apache.cxf.cxf-core;version='[3.5.5,3.5.6)',\
	org.apache.cxf.cxf-rt-frontend-jaxrs;version='[3.5.5,3.5.6)',\
	org.apache.cxf.cxf-rt-rs-client;version='[3.5.5,3.5.6)',\
	org.apache.cxf.cxf-rt-rs-security-cors;version='[3.5.5,3.5.6)',\
	org.apache.cxf.cxf-rt-rs-sse;version='[3.5.5,3.5.6)',\
	org.apache.cxf.cxf-rt-security;version='[3.5.5,3.5.6)',\
	org.apache.cxf.cxf-rt-transports-http;version='[3.5.5,3.5.6)',\
	org.apache.felix.configadmin;version='[1.9.26,1.9.27)',\
	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.2.0,4.2.1)',\
	org.apache.felix.http.servlet-api;version='[1.2.0,1.2.1)',\
	org.apache.geronimo.specs.geronimo-jaxrs_2.1_spec;version='[1.1.0,1.1.1)',\
	org.apache.servicemix.bundles.junit;version='[4.13.2,4.13.3)',\
	org.apache.ws.xmlschema.core;version='[2.3.0,2.3.1)',\
	org.osgi.service.jaxrs;version='[1.0.1,1.0.2)',\
	org.osgi.util.function;version='[1.2.0,1.2.1)',\
	org.osgi.util.promise;version='[1.2.0,1.2.1)',\
	stax2-api;version='[4.2.1,4.2.2)'
	
	
blacklist.java.8.jaxb: osgi.identity;filter:='(osgi.identity=jakarta.xml.bind-api)'

-runblacklist: ${if;${is;${def;-runee};JavaSE-1.8};${blacklist.java.8.jaxb}}

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

-include: -personal.bnd
