diff --git a/build.gradle b/build.gradle
index 1a3c7220f8b..7606ab1f620 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,3 +1,4 @@
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
 import org.gradle.internal.os.OperatingSystem
 
 // to update the gradle wrapper, execute ./gradlew wrapper --gradle-version 4.0
@@ -10,6 +11,7 @@ plugins {
     id "com.simonharrer.modernizer" version '1.5.0-1'
     id 'me.champeau.gradle.jmh' version '0.4.3'
     id 'net.ltgt.errorprone' version '0.0.11'
+    id 'com.lazan.javaflavours' version '1.2'
 }
 
 // use the gradle build scan feature: https://scans.gradle.com/get-started
@@ -53,9 +55,26 @@ repositories {
 configurations {
     antlr3
     antlr4
+
+    linux_x86_64Compile.extendsFrom compile
+    macosx_x86_64Compile.extendsFrom compile
+    windows_x86_32Compile.extendsFrom compile
+    windows_x86_64Compile.extendsFrom compile
+}
+
+javaFlavours {
+    flavour 'linux_x86_64'
+    flavour 'macosx_x86_64'
+    flavour 'windows_x86_32'
+    flavour 'windows_x86_64'
 }
 
 dependencies {
+    linux_x86_64Compile   group: 'com.eclipsesource.j2v8', name: 'j2v8_linux_x86_x64',  version: '4.6.0'
+    macosx_x86_64Compile  group: 'com.eclipsesource.j2v8', name: 'j2v8_macosx_x86_x64', version: '4.6.0'
+    windows_x86_32Compile group: 'com.eclipsesource.j2v8', name: 'j2v8_win32_x86',      version: '4.6.0'
+    windows_x86_64Compile group: 'com.eclipsesource.j2v8', name: 'j2v8_win32_x86_x64',  version: '4.6.0'
+
     compile fileTree(dir: 'lib', includes: ['*.jar'])
 
     compile 'com.jgoodies:jgoodies-common:1.8.1'
@@ -171,6 +190,18 @@ clean {
     delete "src/main/gen"
 }
 
+def flavours = ['linux_x86_64', 'macosx_x86_64', 'windows_x86_32', 'windows_x86_64']
+flavours.each { String flavour ->
+    SourceSet flavourSourceSet = sourceSets.getByName(flavour)
+    Configuration flavourRuntime = configurations.getByName("${flavour}Runtime")
+    JavaCompile flavourCompileTask = tasks.getByName("compile${flavour.capitalize()}Java")
+    Task shadowJarTask = tasks.create(name: "${flavour}ShadowJar", type: ShadowJar) {
+        classifier = "${flavour}-fat"
+        dependsOn flavourCompileTask
+    }
+    assemble.dependsOn shadowJarTask
+}
+
 task generateSource(dependsOn: ["generateBstGrammarSource", "generateSearchGrammarSource"]) {
     group = 'JabRef'
     description 'Generates all Java source files.'
@@ -359,7 +390,7 @@ checkstyle {
 checkstyleMain.shouldRunAfter test
 checkstyleTest.shouldRunAfter test
 
-task release(dependsOn: ["media", "releaseJar"]) {
+task release(dependsOn: ["media"]) {
     group = 'JabRef - Release'
     description 'Creates a release for all target platforms.'
 }
diff --git a/external-libraries.txt b/external-libraries.txt
index a9a610bbf7e..8644117511e 100644
--- a/external-libraries.txt
+++ b/external-libraries.txt
@@ -40,6 +40,11 @@ Project: AppleJavaExtensions
 URL:     https://developer.apple.com/legacy/library/samplecode/AppleJavaExtensions/Introduction/Intro.html
 License: Apple License
 
+Id:      com.eclipse.j2v8
+Project: J2V8
+URL:     https://github.com/eclipsesource/J2V8
+Licence: EPL-1.0
+
 Id:      com.github.bkromhout:java-diff-utils
 Project: java-diff-utils
 URL:     https://github.com/bkromhout/java-diff-utils