diff --git a/baksmali/build.gradle b/baksmali/build.gradle
index d346970e..eaddfa27 100644
--- a/baksmali/build.gradle
+++ b/baksmali/build.gradle
@@ -25,7 +25,7 @@ task fatJar(type: Jar) {
     from sourceSets.main.output
     from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
 
-    classifier = 'fat'
+    archiveClassifier = 'fat'
 
     manifest {
         attributes('Main-Class': 'org.jf.baksmali.Main')
@@ -36,6 +36,10 @@ task fatJar(type: Jar) {
             ant.symlink(link: file("${destinationDirectory.get()}/baksmali.jar"), resource: archivePath, overwrite: true)
         }
     }
+
+    // Necessary on Gradle 7 to eplicitly set dependency
+    dependsOn project(':util').jar
+    dependsOn project(':dexlib2').jar
 }
 tasks.getByPath('build').dependsOn(fatJar)
 
diff --git a/build.gradle b/build.gradle
index 5656b634..e519c53e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -30,8 +30,8 @@ subprojects {
     version = parent.version
 
     java {
-        sourceCompatibility JavaVersion.VERSION_1_8
-        targetCompatibility JavaVersion.VERSION_1_8
+        sourceCompatibility JavaVersion.VERSION_17
+        targetCompatibility JavaVersion.VERSION_17
     }
 
     ext {
diff --git a/dexlib2/build.gradle b/dexlib2/build.gradle
index e1c39897..fc45707c 100644
--- a/dexlib2/build.gradle
+++ b/dexlib2/build.gradle
@@ -18,4 +18,7 @@ task ragel(type:Exec) {
             'SyntheticAccessorFSM.rl'
 }
 
-
+test {
+    // Since Java 9, this is needed. See https://stackoverflow.com/a/41265267
+    jvmArgs '--add-opens', 'java.base/java.lang=ALL-UNNAMED'
+}
diff --git a/smali/build.gradle b/smali/build.gradle
index 6ec5f483..2b3bb771 100644
--- a/smali/build.gradle
+++ b/smali/build.gradle
@@ -57,13 +57,17 @@ dependencies {
 
 processResources.inputs.property('version', version)
 processResources.expand('version': version)
+processResources.configure {
+    // Necessary on Gradle 7 to eplicitly set dependency
+    dependsOn generateGrammarSource
+}
 
 // Build a separate jar that contains all dependencies
 task fatJar(type: Jar, dependsOn: jar) {
     from sourceSets.main.output
     from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } }
 
-    classifier = 'fat'
+    archiveClassifier = 'fat'
 
     manifest {
         attributes('Main-Class': 'org.jf.smali.Main')
@@ -74,6 +78,11 @@ task fatJar(type: Jar, dependsOn: jar) {
             ant.symlink(link: file("${destinationDirectory.get()}/smali.jar"), resource: archivePath, overwrite: true)
         }
     }
+
+    // Necessary on Gradle 7 to eplicitly set dependency
+    dependsOn project(':util').jar
+    dependsOn project(':dexlib2').jar
+    dependsOn project(':baksmali').jar
 }
 tasks.getByPath('build').dependsOn(fatJar)
 
