
Aries Blueprint Specification Implementation
Copyright 2009-1010 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product includes software developed at
the OSGi Alliance (http://www.osgi.org/).

 This product includes software developed at
 OPS4J (http://www.ops4j.org/).
(getArtifactVersion and getFileFromClasspath in AbstractIntegrationTest)
These should be moved into pax-exam.
