# Licensed to the Apache Software Foundation (ASF) under the terms of ASLv2 (http://www.apache.org/licenses/LICENSE-2.0).

-sub: *.bnd
-buildpath: \
	${^-buildpath},\
	osgi.core;version=6.0.0,\
	osgi.cmpn,\
	org.apache.felix.dependencymanager,\
	javax.servlet,\
	org.apache.ace.authentication.api;version=latest,\
	org.apache.ace.test;version=latest,\
	org.apache.ace.deployment.provider.api;version=latest,\
	org.apache.ace.deployment.provider.base;version=latest,\
	kxml2;version=2.3.0,\
	org.apache.ace.deployment.util.test;version=latest
	
	
