/*
 * Copyright (c) 2016 Audi AG
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 */

description = 'MDF Sorter'
group = 'org.eclipse.mdm'
version = '1.0.3'

apply plugin: 'java'
apply plugin: 'eclipse'

repositories { mavenCentral() }

dependencies { // testing
	testCompile 'junit:junit:4.12' }

tasks.withType(JavaCompile) {
	sourceCompatibility = '1.7'
	targetCompatibility = '1.7'
}

jar {
	metaInf { from 'NOTICE.txt' }
	metaInf { from 'LICENSE.txt' }
}