diff --git a/build.gradle b/build.gradle
index f5ca296de21a4d3ed40594a8a2525e4d38a0de93..b391f186d0d59e998c7eb08432671efa99fc026a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,8 +1,9 @@
 apply plugin: 'asciidoctor'
+apply plugin: 'eclipse'
 apply plugin: 'eclipse-wtp'
 apply plugin: 'java'
 apply plugin: 'jetty'
-apply plugin: 'eclipse'
+apply plugin: 'maven-publish'
 apply plugin: 'vagrant'
 apply plugin: 'war'
 apply plugin: 'wrapper'
@@ -13,48 +14,64 @@ version = '1.1-SNAPSHOT'
 description = 'Isochrones'
 
 ext {
-	vagrantDirString = System.properties['user.home'] + '/vagrantboxes/isochrones'
+	defaultVersion = '0.3-SNAPSHOT'
+	isRelease = false
+	vagrantDirString = System.properties['user.home'] + '/vagrantboxes/' + project.name.toLowerCase()
 	vagrantDir = file("$vagrantDirString")
 }
 
+if (version.equalsIgnoreCase('unspecified')) {
+	version = defaultVersion
+} else if (!version.matches(~/[0-9\.]*(-SNAPSHOT)?/)) {
+	println "Invalid version number '$version' given. Falling back to default!"
+	version = defaultVersion
+}
+
+if (version.endsWith('-SNAPSHOT')) {
+	println "Building SNAPSHOT version $version"
+} else {
+	isRelease = true;
+	println "Building RELEASE version $version"
+}
+
 repositories {
-     maven { url "http://maven.geo-solutions.it" }
-     maven { url "http://repo.maven.apache.org/maven2" }
+	mavenCentral()
+	maven { url "http://maven.geo-solutions.it" }
 }
 
 buildscript {
 	apply from: 'http://www.krismer.de/files/checkstyle.gradle'
 
-    repositories {
-        jcenter()
-        maven { url 'http://dl.bintray.com/content/aalmiray/asciidoctor'}
-    }
+	repositories {
+		jcenter()
+		maven { url 'http://dl.bintray.com/content/aalmiray/asciidoctor'}
+	}
 
-    dependencies {
-        classpath 'org.gradle.api.plugins:gradle-vagrant-plugin:0.2'
-        classpath 'org.asciidoctor:asciidoctor-gradle-plugin:0.7.0'
-    }
+	dependencies {
+		classpath 'org.gradle.api.plugins:gradle-vagrant-plugin:0.2'
+		classpath 'org.asciidoctor:asciidoctor-gradle-plugin:0.7.0'
+	}
 }
 
 dependencies {
-    compile group: 'postgresql', name: 'postgresql', version:'9.1-901.jdbc4'
-    compile group: 'commons-dbutils', name: 'commons-dbutils', version:'1.2'
-    compile group: 'commons-httpclient', name: 'commons-httpclient', version:'3.1'
-    compile group: 'it.geosolutions', name: 'geoserver-manager', version:'1.5.1'
-    compile group: 'javax.servlet', name: 'servlet-api', version:'2.5'
-    compile group: 'org.cometd.java', name: 'bayeux-api', version:'2.4.3'
-    compile group: 'org.cometd.java', name: 'cometd-java-server', version:'2.4.3'
-    compile group: 'org.cometd.javascript', name: 'cometd-javascript-jquery', version:'2.4.3'
-    compile group: 'org.json', name: 'json', version:'20131018'
-    compile group: 'org.postgis', name: 'postgis-jdbc', version:'1.3.3'
-
-    testCompile 'org.testng:testng:6+'
+	compile group: 'postgresql', name: 'postgresql', version:'9.1-901.jdbc4'
+	compile group: 'commons-dbutils', name: 'commons-dbutils', version:'1.2'
+	compile group: 'commons-httpclient', name: 'commons-httpclient', version:'3.1'
+	compile group: 'it.geosolutions', name: 'geoserver-manager', version:'1.5.1'
+	compile group: 'javax.servlet', name: 'servlet-api', version:'2.5'
+	compile group: 'org.cometd.java', name: 'bayeux-api', version:'2.4.3'
+	compile group: 'org.cometd.java', name: 'cometd-java-server', version:'2.4.3'
+	compile group: 'org.cometd.javascript', name: 'cometd-javascript-jquery', version:'2.4.3'
+	compile group: 'org.json', name: 'json', version:'20131018'
+	compile group: 'org.postgis', name: 'postgis-jdbc', version:'1.3.3'
+
+	testCompile 'org.testng:testng:6+'
 }
 
 asciidoctor {
 	backend = 'html5'
 	sourceDir = file('doc')
-    outputDir = file("$buildDir/docs/asciidoctor")
+	outputDir = file("$buildDir/docs/asciidoctor")
 }
 
 checkstyle {
@@ -79,14 +96,36 @@ eclipse {
 	}
 
 	wtp {
-	    component {
-	        contextPath = '/isochrones'
-	    }
+		component {
+			contextPath = '/isochrones'
+		}
 	
-	    facet {
-	        facet name: 'jst.web', version: '3.0'
-	        facet name: 'jst.java', version: '1.7'
-	    }
+		facet {
+			facet name: 'jst.web', version: '3.0'
+			facet name: 'jst.java', version: '1.7'
+		}
+	}
+}
+
+publishing {
+	publications {
+		mavenJava(MavenPublication) {
+			from components.java
+
+			artifact javadocJar
+			artifact sourcesJar
+			artifact staticJar
+		}
+	}
+
+	repositories {
+		maven {
+			credentials {
+				username repositoryUsername
+				password repositoryPassword
+			}
+			url repositoryPrefix + "${isRelease ? 'releases' : 'snapshots'}"
+		}
 	}
 }
 
@@ -95,8 +134,32 @@ test {
 }
 
 vagrant {
-    boxDir = vagrantDir
-    provider = 'virtualbox'
+	boxDir = vagrantDir
+	provider = 'virtualbox'
+}
+
+task javadocJar(type: Jar, dependsOn: javadoc) {
+	description = 'Builds a jar file including javadoc'
+	from javadoc.destinationDir
+
+	classifier "javadoc"
+}
+
+task sourcesJar(type: Jar, dependsOn: classes) {
+	description = 'Builds a jar file including sources'
+	from sourceSets.main.allSource
+
+	classifier "sources"
+}
+
+task staticJar(type: Jar) {
+	description = 'Builds a jar file including all libraries'
+	from sourceSets.main.output
+	from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
+
+	manifest { attributes 'Main-Class': 'de.krismer.tnfp.TrackNumberFromPlaylist' }
+
+	classifier "static"
 }
 
 task testSimple(type: Test, dependsOn: testClasses) {
@@ -111,8 +174,8 @@ task vagrantPrepare << {
 
 	if (!vagrantDir.isDirectory()) {
 		println "Creating directory $vagrantDir"
-        vagrantDir.mkdirs()
-    }
+		vagrantDir.mkdirs()
+	}
 
 	sync {
 		from files('etc/vagrant')
@@ -122,8 +185,13 @@ task vagrantPrepare << {
 
 vagrantDestroy.doFirst {
 	if (!vagrantDir.isDirectory()) {
-        throw new StopExecutionException()
-    }
+		throw new StopExecutionException()
+	}
 }
 
 vagrantUp.dependsOn(vagrantPrepare)
+
+task jarAll(dependsOn: [jar, javadocJar, sourcesJar, staticJar])
+
+task buildAll(dependsOn: [jarAll, build])
+
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000000000000000000000000000000000000..08eadf9f3e2c39cd831325e358e0a251c41590b6
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,3 @@
+repositoryPrefix=https://server.krismer.de/nexus/content/repositories/
+repositoryUsername=nexus
+repositoryPassword=Nexus!190685