diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4884f2220ab10392bd45d6ed532d7ae536ffcca0..17d099f04886c1802e9129849ba0bc2437f524ab 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -12,7 +12,7 @@ cache:
     - .gradle/caches
 
 build:
-  image: openjdk:8
+  image: openjdk:11
   stage: build
   script:
     - ./gradlew --console=plain --no-daemon assemble jar
@@ -21,7 +21,7 @@ build:
       - "/builds/jastadd/relational-rags/build/libs/relast-*.jar"
 
 test:
-  image: openjdk:8
+  image: openjdk:11
   stage: test
   script:
     - ./gradlew --console=plain --no-daemon --info test
@@ -38,3 +38,11 @@ pages:
   only:
   - master
 
+publish_dev:
+  image: openjdk:11
+  stage: deploy
+  needs:
+    - test
+  script:
+    - "./gradlew setDevVersionForCI"
+    - "./gradlew publish"
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 12190cc26ee02a10d14db6e3f93dcfe27d1534f5..9e6440a0d9992ad393f44fd8d01f19a2407db649 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,49 +1,47 @@
+//file:noinspection HardCodedStringLiteral
+plugins {
+    id 'java'
+    id 'java-library'
+    id 'application'
+    id 'idea'
+    id 'maven-publish'
+    id 'org.jastadd.relast.plugin'
+    id 'org.jastadd' version '1.14.5'
+}
 import org.jastadd.relast.plugin.RelastTest
 
-apply plugin: "com.github.ben-manes.versions"
-apply plugin: 'java'
-apply plugin: 'java-library'
-apply plugin: 'jastadd'
-apply plugin: 'application'
-apply plugin: "idea"
-apply plugin: "org.jastadd.relast.plugin"
-
-sourceCompatibility = 1.8
+java.toolchain.languageVersion = JavaLanguageVersion.of(11)
 
-mainClassName = 'org.jastadd.relast.compiler.Compiler'
+ext {
+    mainClassName = 'org.jastadd.relast.compiler.Compiler'
+}
 
 repositories {
-    jcenter()
+    mavenCentral()
+    maven {
+        name 'gitlab-maven'
+        url 'https://git-st.inf.tu-dresden.de/api/v4/groups/jastadd/-/packages/maven'
+    }
 }
 
 group = 'org.jastadd'
-apply plugin: 'maven-publish'
 
-buildscript {
-    repositories.jcenter()
-    dependencies {
-        classpath 'org.jastadd:jastaddgradle:1.13.3'
-        classpath "com.github.ben-manes:gradle-versions-plugin:0.34.0"
-    }
-}
-
-dependencyUpdates.gradleReleaseChannel="current"
-dependencyUpdates.revision="release"
+// set the main class name for `gradle run`
+application.mainClass = "${mainClassName}"
 
 dependencies {
-    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
-    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
-    testImplementation 'org.assertj:assertj-core:3.18.0'
-    testImplementation 'com.fasterxml.jackson.core:jackson-core:2.11.3'
-    testImplementation 'com.fasterxml.jackson.core:jackson-databind:2.11.3'
-    implementation group: 'org.jastadd', name: 'jastadd', version: '2.3.4'
-    api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
+    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
+    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
+    testImplementation 'org.assertj:assertj-core:3.22.0'
+    testImplementation 'com.fasterxml.jackson.core:jackson-core:2.13.1'
+    testImplementation 'com.fasterxml.jackson.core:jackson-databind:2.13.1'
+    implementation 'org.jastadd:jastadd:2.3.5'
+    api 'net.sf.beaver:beaver-rt:0.9.11'
 }
 
-File genSrc = file("src/gen/java")
-File testGenSrc = file("src/test/java-gen")
+File genSrc = file('src/gen/java')
+File testGenSrc = file('src/test/java-gen')
 sourceSets.main.java.srcDir genSrc
-sourceSets.main.java.srcDir "buildSrc/gen/java"
 sourceSets.test.java.srcDir testGenSrc
 
 idea.module.generatedSourceDirs += genSrc
@@ -68,9 +66,23 @@ task newVersion() {
     }
 }
 
+task printVersion() {
+    doLast {
+        println(version)
+    }
+}
+
+task setDevVersionForCI() {
+    doFirst {
+        def props = new Properties()
+        props['version'] = version + "-$System.env.CI_PIPELINE_IID"
+        props.store(file(versionFile).newWriter(), null)
+    }
+}
+
 jar {
     manifest {
-        attributes "Main-Class": 'org.jastadd.relast.compiler.Compiler'
+        attributes 'Main-Class': "${mainClassName}"
     }
 
     from {
@@ -84,76 +96,77 @@ jastadd {
     configureModuleBuild()
     modules {
         //noinspection GroovyAssignabilityCheck
-        module("RelAst") {
+        module('RelAst') {
 
             java {
-                basedir "."
-                include "src/main/**/*.java"
-                include "src/gen/**/*.java"
+                basedir '.'
+                include 'src/main/**/*.java'
+                include 'src/gen/**/*.java'
             }
 
             jastadd {
-                basedir "src/main/jastadd/"
-                include "**/*.ast"
-                include "**/*.jadd"
-                include "**/*.jrag"
+                basedir 'src/main/jastadd/'
+                include '**/*.ast'
+                include '**/*.jadd'
+                include '**/*.jrag'
             }
 
             scanner {
-                include "src/main/jastadd/RelAst.flex"
+                include 'src/main/jastadd/RelAst.flex'
             }
 
             parser {
-                include "src/main/jastadd/Preamble.parser"
-                include "src/main/jastadd/RelAst.parser"
+                include 'src/main/jastadd/Preamble.parser'
+                include 'src/main/jastadd/RelAst.parser'
             }
         }
     }
 
     cleanGen.doFirst {
-        delete "src/gen/java/org"
-        delete "src/gen-res/BuildInfo.properties"
+        delete 'src/gen/'
+        delete 'src/gen-res/'
     }
 
     preprocessParser.doFirst {
-
         args += ["--no-beaver-symbol"]
-
     }
 
-    module = "RelAst"
-
+    module = 'RelAst'
     astPackage = 'org.jastadd.relast.ast'
-
     parser.name = 'RelAstParser'
-
     genDir = 'src/gen/java'
-
     buildInfoDir = 'src/gen-res'
+    scanner.genDir = 'src/gen/java/org/jastadd/relast/scanner'
+    parser.genDir = 'src/gen/java/org/jastadd/relast/parser'
 
-    scanner.genDir = "src/gen/java/org/jastadd/relast/scanner"
-    parser.genDir = "src/gen/java/org/jastadd/relast/parser"
-
-    jastaddOptions = ["--lineColumnNumbers", "--safeLazy", "--visitCheck=true", "--rewrite=cnta", "--cache=all"]
+    jastaddOptions = ['--lineColumnNumbers', '--safeLazy', '--visitCheck=true', '--rewrite=cnta', '--cache=all']
 }
 
+// publish gitlab project
 publishing {
     publications {
         maven(MavenPublication) {
-            artifact("build/libs/relast-${version}.jar") {
-                extension 'jar'
-            }
+            artifactId = 'relast'
+            from components.java
         }
     }
     repositories {
         maven {
-            name 'nexus'
-            url "http://172.22.1.152:8081/repository/" + (project.hasProperty('asSnapshot') ? "maven-snapshots" : "maven-releases/")
-            credentials {
-                username project.ext.properties.repoUser
-                password project.ext.properties.repoPassword
+            url "https://git-st.inf.tu-dresden.de/api/v4/projects/$System.env.CI_PROJECT_ID/packages/maven"
+            // Uncomment the following lines to publish manually (and comment out the other credentials section)
+//            credentials(HttpHeaderCredentials) {
+//                name = "Private-Token"
+//                value = gitLabPrivateToken // the variable resides in ~/.gradle/gradle.properties
+//            }
+            credentials(HttpHeaderCredentials) {
+                name = 'Job-Token'
+                value = System.getenv('CI_JOB_TOKEN')
+            }
+            authentication {
+                header(HttpHeaderAuthentication)
             }
         }
+
     }
 }
 
@@ -199,8 +212,8 @@ task compileDefaultNamesResolverTest(type: RelastTest) {
     resolverHelper = true
     packageName = 'defaultnames.resolver.ast'
     moreInputFiles 'src/test/jastadd/Utils.jadd',
-                   'src/test/jastadd/resolver/ResolverUtils.jadd',
-                   'src/test/jastadd/resolver/MyRefResolver.jadd'
+            'src/test/jastadd/resolver/ResolverUtils.jadd',
+            'src/test/jastadd/resolver/MyRefResolver.jadd'
 }
 
 task compileLowerBoundsTest(type: RelastTest) {
@@ -213,8 +226,8 @@ task compileLowerBoundsTest(type: RelastTest) {
 
 task compileMultipleTest(type: RelastTest) {
     relastFiles 'src/test/jastadd/multiple/Part1.relast',
-                'src/test/jastadd/multiple/Part2.relast',
-                'src/test/jastadd/multiple/Part3.relast'
+            'src/test/jastadd/multiple/Part2.relast',
+            'src/test/jastadd/multiple/Part3.relast'
     grammarName = 'src/test/jastadd/multiple/Multiple'
     useJastAddNames = true
     packageName = 'multiple.ast'
diff --git a/settings.gradle b/settings.gradle
index 3eb76f1e946e81f5037864327765fdf452bf8c5c..0d12b34fc0f5973338efb7ba84cf7e4e6e970b4e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,7 +1,3 @@
-rootProject.name = 'relast2uml'
+rootProject.name = 'RelAST'
 
-include 'relast.preprocessor'
-include 'dumpAst'
-include 'testDumper'
-include 'featureTest'