#
# Properties file indicating the boot (or mandatory) bundles that are loaded
# by the testing framework.
#
# Normally, this file should not be edited since it is used by the testing infrastructure.
# Users that want to install bundles before starting a test, should use #bundles() method.
#

# elements that have to be ignored should star with
# ignore

# Note: inner placeholders are not supported. 

#
# common properties
#

# versioning
ignore.junit.version=4.9.0
ignore.log4j.version=1.2.16

ignore.spring.version=3.1.1.RELEASE
ignore.gemini.blueprint.version=2.0.0.BUILD-SNAPSHOT
ignore.slf4j.version=1.6.4
ignore.asm.version=2.2.3

# groupIds
ignore.spring.groupId=org.springframework
ignore.gemini.blueprint.groupId=org.eclipse.gemini.blueprint
ignore.slf4j.groupId=org.slf4j

#
# actual libraries
#
# listed in dependency order to ease deployment

# dependencies

# junit
org.junit,com.springsource.org.junit,${ignore.junit.version}=
# log4j
org.apache.log4j,com.springsource.org.apache.log4j,${ignore.log4j.version}=
# slf4j
${ignore.slf4j.groupId},slf4j-api,${ignore.slf4j.version}=
${ignore.slf4j.groupId},slf4j-log4j12,${ignore.slf4j.version}=
${ignore.slf4j.groupId},jcl-over-slf4j,${ignore.slf4j.version}=
# aop alliance
org.aopalliance,com.springsource.org.aopalliance,1.0.0=
# asm
org.objectweb.asm,com.springsource.org.objectweb.asm,${ignore.asm.version}=

# spring libs
${ignore.spring.groupId},spring-asm,${ignore.spring.version}=
${ignore.spring.groupId},spring-beans,${ignore.spring.version}=
${ignore.spring.groupId},spring-core,${ignore.spring.version}=
${ignore.spring.groupId},spring-context,${ignore.spring.version}=
${ignore.spring.groupId},spring-expression,${ignore.spring.version}=
${ignore.spring.groupId},spring-aop,${ignore.spring.version}=
${ignore.spring.groupId},spring-test,${ignore.spring.version}=

# gemini blueprint libs
${ignore.gemini.blueprint.groupId},gemini-blueprint-io,${ignore.gemini.blueprint.version}=
${ignore.gemini.blueprint.groupId},gemini-blueprint-core,${ignore.gemini.blueprint.version}=
${ignore.gemini.blueprint.groupId},gemini-blueprint-extender,${ignore.gemini.blueprint.version}=
${ignore.gemini.blueprint.groupId},gemini-blueprint-test,${ignore.gemini.blueprint.version}=