//This target platform is not used as-is, but we need it to get a mix of Nightlies and Release artifacts for Papyrus
//Papyrus tests need the Nightlies, whereas we want to build against the Release. We can't mix both in a single TP.
//So we need a generic base TP that excludes Papyrus, then Main and Tests will add the version of Papyrus they need

target "Compare Target Platform - Base for Release" with source requirements

location "http://download.eclipse.org/releases/oxygen/" eclipse-oxygen {
	org.eclipse.platform.feature.group
	org.eclipse.sdk.feature.group
	org.eclipse.rcp.feature.group
	org.eclipse.jdt.feature.group
	org.eclipse.equinox.p2.discovery.feature.feature.group
	org.eclipse.equinox.executable.feature.group
	org.eclipse.draw2d
	org.eclipse.gef
	org.eclipse.m2m.qvt.oml.sdk.feature.group
	org.eclipse.emf.sdk.feature.group
	org.eclipse.xsd.sdk.feature.group
	org.eclipse.emf.validation.sdk.feature.group
	org.eclipse.emf.transaction.sdk.feature.group
	org.eclipse.emf.workspace.feature.group
	org.eclipse.gmf.runtime.notation.sdk.feature.group
	org.eclipse.gmf.runtime.sdk.feature.group
	org.eclipse.uml2.sdk.feature.group
}

location "http://download.eclipse.org/egit/updates" egit {
	org.eclipse.egit.feature.group
	org.eclipse.jgit.feature.group
}

location "http://download.eclipse.org/modeling/emf/compare/updates/logical/emf.compare/integration/" emfCompare {
	org.eclipse.emf.compare.source.feature.group lazy
	org.eclipse.emf.compare.diagram.gmf.source.feature.group lazy
	org.eclipse.emf.compare.uml2.source.feature.group lazy
	org.eclipse.emf.compare.egit.source.feature.group lazy
	org.eclipse.emf.compare.ide.ui.source.feature.group lazy
	org.eclipse.emf.compare.rcp.ui.source.feature.group lazy
}

//manualUpdate
location orbit "http://download.eclipse.org/tools/orbit/downloads/drops/R20170307180635/repository" {
	org.apache.commons.io
	org.apache.commons.io.source
	com.google.inject
	com.google.guava [21.0.0,22.0.0)
	com.google.guava.source [21.0.0,22.0.0)
	/* Egit/Jgit */
	javaewah
	org.apache.commons.compress
	org.apache.commons.lang
	org.kohsuke.args4j
	org.mockito [1.9.0,2.0.0)
	org.hamcrest
	org.hamcrest.library
	org.hamcrest.integration
	org.hamcrest.text
	org.objenesis [1.0.0,2.0.0)
}
