Fixed that signatures of third party libraries get copied to uber jar refusing java -jar to run the uber jar
This commit is contained in:
parent
802bab9c38
commit
0dac13dc43
|
@ -1,4 +1,5 @@
|
||||||
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
|
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
|
||||||
|
import org.jetbrains.compose.desktop.tasks.AbstractJarsFlattenTask
|
||||||
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
|
||||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||||
|
@ -227,3 +228,58 @@ compose.desktop {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gradle.taskGraph.whenReady {
|
||||||
|
tasks.named<AbstractJarsFlattenTask>("flattenJars") {
|
||||||
|
removeThirdPartySignaturesFromJar()
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named<AbstractJarsFlattenTask>("flattenReleaseJars") {
|
||||||
|
removeThirdPartySignaturesFromJar()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signatures of third party libraries get copied to output jar's META-INF folder so that java -jar refuses to run created uber jar:
|
||||||
|
// Error: A JNI error has occurred, please check your installation and try again
|
||||||
|
// Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
|
||||||
|
// at java.base/sun.security.util.SignatureFileVerifier.processImpl(SignatureFileVerifier.java:340)
|
||||||
|
// at java.base/sun.security.util.SignatureFileVerifier.process(SignatureFileVerifier.java:282)
|
||||||
|
// at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:276)
|
||||||
|
//
|
||||||
|
// -> remove signatures of third party libraries from jar's META-INF folder
|
||||||
|
fun AbstractJarsFlattenTask.removeThirdPartySignaturesFromJar() {
|
||||||
|
val outputJar = (this.flattenedJar as? FileSystemLocationProperty<*>)?.asFile?.get()
|
||||||
|
|
||||||
|
doLast {
|
||||||
|
if (outputJar != null && outputJar.exists()) {
|
||||||
|
val extractedFilesFolder = File(outputJar.parentFile, "extracted").also { it.mkdirs() }
|
||||||
|
extractedFilesFolder.deleteRecursively()
|
||||||
|
|
||||||
|
project.copy { // unzip jar file
|
||||||
|
from(project.zipTree(outputJar))
|
||||||
|
into(extractedFilesFolder)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove unwanted META-INF files (*.SF, *.DSA, *.RSA)
|
||||||
|
project.fileTree(extractedFilesFolder.resolve("META-INF")).matching {
|
||||||
|
include("*.SF", "*.DSA", "*.RSA")
|
||||||
|
}.forEach {
|
||||||
|
it.delete() // Delete the matching signature files
|
||||||
|
}
|
||||||
|
|
||||||
|
outputJar.delete() // Remove the original JAR
|
||||||
|
|
||||||
|
// Zip the modified content back into a new JAR using Ant
|
||||||
|
ant.withGroovyBuilder {
|
||||||
|
"zip"(
|
||||||
|
"destfile" to outputJar,
|
||||||
|
"basedir" to extractedFilesFolder
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up the temporary directory
|
||||||
|
extractedFilesFolder.deleteRecursively()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue