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

-jpms-module-info: \
	${project.artifactId};\
		version=${project.version};\
		ee=JavaSE-${java.specification.version}

-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=org.apache.aries.jax.rs.whiteboard)',\
	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=8080,\
	org.apache.aries.spifly.auto.consumers=jakarta.*,\
	org.apache.aries.spifly.auto.providers=com.sun.*

-runbundles: \
	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)',\
	org.apache.aries.component-dsl.component-dsl;version='[1.2.2,1.2.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-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.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)'

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

-include: -personal.bnd
