target "Compare Target Platform - Nightly" with source requirements

location "http://download.eclipse.org/staging/photon/" eclipse-photon {
	org.eclipse.draw2d lazy
	org.eclipse.gef lazy
	org.eclipse.ocl.core.sdk.feature.group lazy
	org.eclipse.ocl.examples.classic.feature.group lazy
	org.eclipse.ocl.examples.feature.group lazy
	org.eclipse.emf.sdk.feature.group lazy
	org.eclipse.xsd.sdk.feature.group lazy
}

/*
 * Once Photon.1 is released this should be removed as the necessary feature versions 
 * will also be available in http://download.eclipse.org/staging/photon/
 */
location "http://download.eclipse.org/eclipse/updates/4.9/" {
	org.eclipse.sdk.feature.group lazy
	org.eclipse.platform.feature.group lazy
	org.eclipse.rcp.feature.group lazy
	org.eclipse.jdt.feature.group lazy
	org.eclipse.equinox.p2.discovery.feature.feature.group lazy
	org.eclipse.equinox.executable.feature.group lazy
}

/*
 * If changed, this should also be changed in Papyrus Compare's root pom.xml, in the nightly profile
 * Search all references to egit.p2.repo
 */
location "http://download.eclipse.org/egit/updates" EGit {
	org.eclipse.egit.feature.group lazy
	org.eclipse.jgit.feature.group lazy
}

location papyrusNightly "http://download.eclipse.org/modeling/mdt/papyrus/updates/nightly/photon" {
	org.eclipse.papyrus.sdk.feature.feature.group lazy
	org.eclipse.papyrus.views.properties.toolsmiths lazy
}

location xwt "http://download.eclipse.org/xwt/updates" {
	org.eclipse.xwt.feature.feature.group [1.3.1,2.0.0)
}

/*
 * If changed, this should also be changed in Papyrus Compare's root pom.xml, in the nightly profile
 * Search all references to emf-compare.p2.repo
 */
location emfCompare "http://download.eclipse.org/modeling/emf/compare/updates/logical/emf.compare/nightly/latest/" {
	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
}

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