/* 
 * Target Platform Definition created using Mikael Barbero's TPD editor 
 * <https://github.com/mbarbero/fr.obeo.releng.targetplatform/>
 * 
 * If you make changes to this file, either:
 * 
 *    * Right-click in the editor and choose 'Create Target Definition File'
 *      to update the corresponding .target file.
 *    * Right-lick in the editor and choose 'Set as Target Platform'
 *      to update your IDE's target platform (regenerates the .target too)
 */
target "UOMo for Eclipse Oxygen" with source requirements

location "http://download.eclipse.org/cbi/updates/license" {
    org.eclipse.license.feature.group    
}

location "http://download.eclipse.org/releases/oxygen/201702031000/" {
	org.eclipse.sdk.feature.group
	org.eclipse.jdt.feature.group
	org.eclipse.m2e.feature.feature.group
	org.eclipse.m2e.sdk.feature.feature.group
	org.eclipse.m2e.wtp.feature.feature.group
	org.eclipse.m2e.wtp.sdk.feature.feature.group
	org.eclipse.mylyn.commons.feature.group
	org.eclipse.jpt.jpa.feature.feature.group
	org.eclipse.datatools.sdk.feature.feature.group
	org.eclipse.swtbot.eclipse.feature.group
	
	org.eclipse.epp.logging.aeri.feature.feature.group
	org.eclipse.epp.logging.aeri.feature.source.feature.group
	
	org.eclipse.jetty.http
	org.eclipse.jetty.servlet
	org.eclipse.jetty.server
	org.eclipse.jetty.util
}

// /webtools/repository/oxygen currently has some issues
// location "http://download.eclipse.org/webtools/repository/oxygen/" {
location "http://download.eclipse.org/webtools/downloads/drops/R3.9.0/S-3.9.0M5-20170201000249/repository" {
    org.eclipse.jst.web_sdk.feature.feature.group
    org.eclipse.jst.server_sdk.feature.feature.group
    org.eclipse.jst.common.fproj.enablement.jdt.sdk.feature.group
    org.eclipse.wst.common.fproj.sdk.feature.group
    org.eclipse.wst.web_sdk.feature.feature.group
    org.eclipse.jst.enterprise_sdk.feature.feature.group
    org.eclipse.wst.server_adapters.sdk.feature.feature.group
}

location "http://download.eclipse.org/tools/orbit/downloads/drops/S20170120205402/repository/" {
    org.hamcrest
	ch.qos.logback.slf4j
	org.slf4j.log4j
}