diff --git a/build.sbt b/build.sbt
deleted file mode 100644
index ca69e7fe9a7332615b10e5a2ee8b4fafbb2039ec..0000000000000000000000000000000000000000
--- a/build.sbt
+++ /dev/null
@@ -1,42 +0,0 @@
-import com.simplytyped.Antlr4Plugin.autoImport.antlr4PackageName
-import sbt.Keys.{libraryDependencies, scalacOptions, version}
-
-val emfcommonVersion = "2.12.0"
-val emfecoreVersion = "2.12.0"
-val scoptVersion = "3.7.0"
-val liftVersion = "3.3.0"
-val gsonVersion = "2.8.5"
-val scrollVersion = "1.8"
-
-javacOptions ++= Seq("-encoding", "UTF-8")
-
-lazy val mjparser = (project in file("."))
-  .settings(
-    name := "ModelJoinParser",
-    version := "0.1",
-    scalaVersion := "2.12.6",
-    libraryDependencies ++= Seq(
-      "com.github.max-leuthaeuser" %% "scroll" % scrollVersion,
-      "org.scala-lang" % "scala-reflect" % scalaVersion.value,
-      "org.scala-lang" % "scala-compiler" % scalaVersion.value,
-      "org.eclipse.emf" % "org.eclipse.emf.common" % emfcommonVersion,
-      "org.eclipse.emf" % "org.eclipse.emf.ecore" % emfecoreVersion,
-      "com.github.scopt" %% "scopt" % scoptVersion,
-      "net.liftweb" %% "lift-json" % liftVersion,
-      "com.google.code.gson" % "gson" % gsonVersion,
-
-      "org.junit.platform" % "junit-platform-runner" % "1.0.0" % "test",
-      "org.junit.jupiter" % "junit-jupiter-engine" % "5.0.0" % "test",
-      "org.junit.vintage" % "junit-vintage-engine" % "4.12.0" % "test",
-      "org.assertj" % "assertj-core" % "3.12.2" % "test",
-
-      "net.aichler" % "jupiter-interface" % JupiterKeys.jupiterVersion.value % Test
-    ),
-    scalacOptions ++= Seq(
-      "-language:implicitConversions"
-    ),
-  ).enablePlugins(Antlr4Plugin)
-
-antlr4PackageName in Antlr4 := Some("org.rosi_project.model_sync.model_join.representation.parser.antlr.generated")
-antlr4GenVisitor in Antlr4 := true
-antlr4GenListener in Antlr4 := false
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6f3db0f2b4e001ebe66ac15c687159ef06fe55e2
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,86 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>org.rosi_project.model_sync</groupId>
+	<artifactId>model_join</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+
+	<properties>
+		<maven.compiler.source>1.8</maven.compiler.source>
+		<maven.compiler.target>1.8</maven.compiler.target>
+	</properties>
+
+	<dependencies>
+		<!-- Runtime dependencies -->
+		<dependency>
+			<groupId>org.antlr</groupId>
+			<artifactId>antlr4-runtime</artifactId>
+			<version>4.7.2</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+			<version>28.0-jre</version>
+		</dependency>
+		<dependency>
+			<groupId>com.google.code.findbugs</groupId>
+			<artifactId>jsr305</artifactId>
+			<version>3.0.2</version>
+		</dependency>
+
+		<!-- Test dependencies -->
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-api</artifactId>
+			<version>5.5.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-engine</artifactId>
+			<version>5.5.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.assertj</groupId>
+			<artifactId>assertj-core</artifactId>
+			<version>3.12.2</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.antlr</groupId>
+				<artifactId>antlr4-maven-plugin</artifactId>
+				<version>4.3</version>
+				<executions>
+					<execution>
+						<id>antlr</id>
+						<goals>
+							<goal>antlr4</goal>
+						</goals>
+						<configuration>
+							<arguments>
+								<argument>-package</argument>
+								<argument>org.rosi_project.model_sync.model_join.representation.parser.antlr.generated</argument>
+							</arguments>
+							<listener>false</listener>
+							<visitor>true</visitor>
+							<outputDirectory>${project.build.directory}/generated-sources/antlr4/org/rosi_project/model_sync/model_join/representation/parser/antlr/generated</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.22.1</version>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
\ No newline at end of file
diff --git a/project/build.properties b/project/build.properties
deleted file mode 100644
index cabf73b45107a5feb964e2c564c9687faafffdbe..0000000000000000000000000000000000000000
--- a/project/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-sbt.version = 1.2.7
diff --git a/project/plugins.sbt b/project/plugins.sbt
deleted file mode 100644
index 4a65abadaf7e792155072db22cce49a4abbf4d54..0000000000000000000000000000000000000000
--- a/project/plugins.sbt
+++ /dev/null
@@ -1,6 +0,0 @@
-
-resolvers += Resolver.jcenterRepo
-
-addSbtPlugin("net.aichler" % "sbt-jupiter-interface" % "0.8.2")
-addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
-addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
diff --git a/project/sbt-antlr4.sbt b/project/sbt-antlr4.sbt
deleted file mode 100644
index 7b26d1fc7b9ee12df151e57cb9e2528c1a4f8d9f..0000000000000000000000000000000000000000
--- a/project/sbt-antlr4.sbt
+++ /dev/null
@@ -1,2 +0,0 @@
-
-addSbtPlugin("com.simplytyped" % "sbt-antlr4" % "0.8.2")
diff --git a/src/test/java/org/rosi_project/model_sync/model_join/representation/writer/StringBasedModelJoinWriterAcceptanceTests.java b/src/test/java/org/rosi_project/model_sync/model_join/representation/writer/StringBasedModelJoinWriterAcceptanceTests.java
index 716d8d54e9644a7c9eaa2e0f0c6e9e09d8c9e474..20ccc2b2c1cbe933c406cd0e553bc71c37b7d70e 100644
--- a/src/test/java/org/rosi_project/model_sync/model_join/representation/writer/StringBasedModelJoinWriterAcceptanceTests.java
+++ b/src/test/java/org/rosi_project/model_sync/model_join/representation/writer/StringBasedModelJoinWriterAcceptanceTests.java
@@ -1,39 +1,37 @@
 package org.rosi_project.model_sync.model_join.representation.writer;
 
-import static org.assertj.core.api.Assertions.*;
-
+import static org.assertj.core.api.Assertions.assertThat;
 import java.util.logging.Logger;
 import org.junit.jupiter.api.Test;
-import org.junit.platform.runner.JUnitPlatform;
-import org.junit.runner.RunWith;
 import org.rosi_project.model_sync.model_join.representation.writer.TestedModels.Listing2;
 
 class StringBasedModelJoinWriterAcceptanceTests {
 
-  private static final Logger log = Logger.getLogger(StringBasedModelJoinWriterAcceptanceTests.class.getSimpleName());
+	private static final Logger log =
+			Logger.getLogger(StringBasedModelJoinWriterAcceptanceTests.class.getSimpleName());
 
-  /**
-   * @see TestedModels
-   */
-  @Test
-  void writeProducesListing2FromTechnicalReport() {
-    StringBasedModelJoinWriter writer = StringBasedModelJoinWriter.withNewlines();
-    String writerOutput = writer.write(Listing2.asModelJoin);
+	/**
+	 * @see TestedModels
+	 */
+	@Test
+	void writeProducesListing2FromTechnicalReport() {
+		StringBasedModelJoinWriter writer = StringBasedModelJoinWriter.withNewlines();
+		String writerOutput = writer.write(Listing2.asModelJoin);
 
-    log.info("Writer output:");
-    log.info(writerOutput);
+		log.info("Writer output:");
+		log.info(writerOutput);
 
-    String sanitizedWriterOutput = sanitize(writerOutput);
+		String sanitizedWriterOutput = sanitize(writerOutput);
 
-    String expectedOutput = sanitize(Listing2.asString);
+		String expectedOutput = sanitize(Listing2.asString);
 
-    // Although AssertJ provides an isEqualToIgnoringWhitespace as well as an
-    // isEqualToIgnoringNewline method, there's none that ignores both. Thus we reside to manual
-    // sanitization
-    assertThat(sanitizedWriterOutput).isEqualTo(expectedOutput);
-  }
+		// Although AssertJ provides an isEqualToIgnoringWhitespace as well as an
+		// isEqualToIgnoringNewline method, there's none that ignores both. Thus we reside to manual
+		// sanitization
+		assertThat(sanitizedWriterOutput).isEqualTo(expectedOutput);
+	}
 
-  private String sanitize(String rawModelJoin) {
-    return rawModelJoin.replaceAll("\\s", "");
-  }
+	private String sanitize(String rawModelJoin) {
+		return rawModelJoin.replaceAll("\\s", "");
+	}
 }