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

#-runjdb: 8000

-standalone: true
-runee: JavaSE-${if;${startswith;${java.version};1.};${substring;${java.version};0;3};${subst;${java.version};\\..*}}
-runfw: org.eclipse.osgi
-runproperties: \
	eclipse.log.enabled=false,\
	logback.configurationFile=file:${.}/logback.xml,\
	org.osgi.service.http.port=0,\
	osgi.console=,\
	test.property.a=blah,\
	test.property.b=,\
	org.apache.felix.http.host=localhost

-resolve.effective: resolve, active

-runpath: \
	ch.qos.logback.classic,\
	ch.qos.logback.core,\
	org.apache.felix.logback,\
	slf4j.api

-runsystempackages: \
	org.slf4j;version=1.7.25,\
	org.slf4j.event;version=1.7.25,\
	org.slf4j.helpers;version=1.7.25,\
	org.slf4j.spi;version=1.7.25,\
	sun.invoke,\
	sun.misc

-runrequires.base: \
	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.extra)',\
	osgi.identity;filter:='(osgi.identity=org.apache.aries.cdi.itests)',\
	osgi.identity;filter:='(osgi.identity=org.apache.aries.jndi.core)',\
	osgi.identity;filter:='(osgi.identity=org.apache.felix.gogo.command)'

-runblacklist.base: \
	osgi.identity;filter:='(osgi.identity=biz.aQute.bndlib)'
