diff --git a/build.gradle b/build.gradle
index 78228deb83ea2c2acc14174e6a61f64f129d167f..3e8eb6674186b6586ab3a8b0bca7c95c0a229939 100644
--- a/build.gradle
+++ b/build.gradle
@@ -14,11 +14,20 @@ application.mainClassName = "${mainClassName}"
 
 repositories {
     mavenCentral()
+    maven {
+        name 'gitlab-maven'
+        url 'https://git-st.inf.tu-dresden.de/api/v4/groups/jastadd/-/packages/maven'
+    }
+}
+
+configurations {
+    relast
 }
 
 dependencies {
-    implementation project(':relast.preprocessor')
-    testImplementation testFixtures(project(":relast.preprocessor"))
+    relast group: 'org.jastadd', name: 'relast', version: "${relast_version}"
+    implementation group: 'org.jastadd', name: 'relast-preprocessor', version: "${preprocessor_version}"
+    testImplementation testFixtures(group: 'org.jastadd', name: 'relast-preprocessor', version: "${preprocessor_version}")
 }
 
 project.version = "0.2.0"
@@ -35,20 +44,37 @@ test {
     maxHeapSize = '1G'
 }
 
+task extractJastAddSources(type: Sync) {
+
+    dependsOn configurations.runtimeClasspath
+    configurations.runtimeClasspath.asFileTree.filter { it.toString().endsWith("relast-preprocessor-${preprocessor_version}.jar") }.collect {
+        from(zipTree(it)) {
+            include "**/*.jrag"
+            include "**/*.jadd"
+            include "**/*.ast"
+            include "**/*.relast"
+            include "**/*.flex"
+            include "**/*.parser"
+        }
+    }
+    includeEmptyDirs false
+    into file("${project.buildDir}/tmp/jastadd-sources")
+}
+
 jar {
     manifest {
         attributes "Main-Class": "${mainClassName}"
     }
 
     from {
-        configurations.runtimeClasspath.collect { return (it.exists() && (!it.toString().contains("/build/libs/")|| it.toString().contains("-base-"))) ? (it.isDirectory() ? it : zipTree(it)) : null }
+        configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) }
     }
 }
 
 // Input and output files for relast
 def relastInputFiles = [
-        "relast.preprocessor/src/main/jastadd/RelAst.relast",
-        "relast.preprocessor/src/main/jastadd/mustache/Mustache.relast"
+        "${project.buildDir}/tmp/jastadd-sources/RelAst.relast",
+        "${project.buildDir}/tmp/jastadd-sources/mustache/Mustache.relast"
 ]
 def relastOutputFiles = [
         "src/gen/jastadd/RelAst.ast",
@@ -59,8 +85,11 @@ def relastOutputFiles = [
 
 
 task relast(type: JavaExec) {
-    classpath = files("relast.preprocessor/libs/relast.jar")
     group = 'Build'
+    classpath = configurations.relast
+    mainClass = 'org.jastadd.relast.compiler.Compiler'
+
+    dependsOn extractJastAddSources
 
     doFirst {
         delete relastOutputFiles
@@ -88,9 +117,9 @@ jastadd {
 
             jastadd {
                 basedir "."
-                include "relast.preprocessor/src/main/jastadd/**/*.ast"
-                include "relast.preprocessor/src/main/jastadd/**/*.jadd"
-                include "relast.preprocessor/src/main/jastadd/**/*.jrag"
+                include "build/tmp/jastadd-sources/**/*.ast"
+                include "build/tmp/jastadd-sources/**/*.jadd"
+                include "build/tmp/jastadd-sources/**/*.jrag"
                 include "src/main/jastadd/**/*.ast"
                 include "src/main/jastadd/**/*.jadd"
                 include "src/main/jastadd/**/*.jrag"
@@ -100,18 +129,18 @@ jastadd {
             }
 
             scanner {
-                include "relast.preprocessor/src/main/jastadd/scanner/Header.flex",         [-4]
-                include "relast.preprocessor/src/main/jastadd/scanner/Preamble.flex",       [-3]
-                include "relast.preprocessor/src/main/jastadd/scanner/Macros.flex",         [-2]
-                include "relast.preprocessor/src/main/jastadd/scanner/RulesPreamble.flex",  [-1]
-                include "relast.preprocessor/src/main/jastadd/scanner/Keywords.flex",       [ 0]
-                include "relast.preprocessor/src/main/jastadd/scanner/Symbols.flex",        [ 1]
-                include "relast.preprocessor/src/main/jastadd/scanner/RulesPostamble.flex", [ 2]
+                include "build/tmp/jastadd-sources/scanner/Header.flex",         [-4]
+                include "build/tmp/jastadd-sources/scanner/Preamble.flex",       [-3]
+                include "build/tmp/jastadd-sources/scanner/Macros.flex",         [-2]
+                include "build/tmp/jastadd-sources/scanner/RulesPreamble.flex",  [-1]
+                include "build/tmp/jastadd-sources/scanner/Keywords.flex",       [ 0]
+                include "build/tmp/jastadd-sources/scanner/Symbols.flex",        [ 1]
+                include "build/tmp/jastadd-sources/scanner/RulesPostamble.flex", [ 2]
             }
 
             parser {
-                include "relast.preprocessor/src/main/jastadd/parser/Preamble.parser"
-                include "relast.preprocessor/src/main/jastadd/parser/RelAst.parser"
+                include "build/tmp/jastadd-sources/parser/Preamble.parser"
+                include "build/tmp/jastadd-sources/parser/RelAst.parser"
             }
         }
     }
@@ -142,5 +171,4 @@ jastadd {
 }
 
 clean.dependsOn(cleanGen)
-generateAst.dependsOn(relast)
-jar.dependsOn("relast.preprocessor:jar") // the jar is a fat jar that contains the jar of the preprocessor
+generateAst.dependsOn(relast, extractJastAddSources)
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000000000000000000000000000000000000..47cf02494925ad66bdfcd8d4d74ab2e1f5de6fc2
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,2 @@
+relast_version = 0.3.0-137
+preprocessor_version = 0.1.0-41
\ No newline at end of file
diff --git a/src/test/resources/RelAstPreprocessor/config.yaml b/src/test/resources/RelAstPreprocessor/config.yaml
index 0122f6c7a6cfb15f71004cc97bf1a413d6b55b2f..87455fb34c67de257f17c68970a281ba98aa5095 100644
--- a/src/test/resources/RelAstPreprocessor/config.yaml
+++ b/src/test/resources/RelAstPreprocessor/config.yaml
@@ -1,7 +1,7 @@
 - name: "RelAST Preprocessor Grammar from submodule (null)"
-  in: "../../../../relast.preprocessor/src/main/jastadd/"
+  in: "../../../../build/tmp/jastadd-sources/"
   args:
-    - "--inputBaseDir=../../../../relast.preprocessor/src/main/jastadd/"
+    - "--inputBaseDir=../../../../build/tmp/jastadd-sources/"
     - "--outputBaseDir=out"
     - "--errorHandling=null"
     - "RelAst.relast"