我正在嘗試用 Gradle 構建一個 Spark fat jar。構建成功,但檔案以一種微妙的方式損壞:嘗試運行它會產生:
Error: Could not find or load main class shadow_test.Main
Caused by: java.lang.ClassNotFoundException: shadow_test.Main
JAR 本身看起來不錯:缺少的類就在那里,當我解壓縮它時,我可以正常運行專案。
這是gradle.build檔案:
plugins {
id "scala"
id 'com.github.johnrengelman.shadow' version '7.1.2'
}
ext {
ver = [
scala : '2.11.12',
scala_rt: '2.11',
spark : '2.4.4'
]
}
configurations {
// Dependencies that will be provided at runtime in the cloud execution
provided
compileOnly.extendsFrom(provided)
testImplementation.extendsFrom provided
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.scala-lang:scala-library:$ver.scala"
provided "org.apache.xbean:xbean-asm6-shaded:4.10"
provided "org.apache.spark:spark-sql_$ver.scala_rt:$ver.spark"
provided "org.apache.spark:spark-hive_$ver.scala_rt:$ver.spark"
testImplementation "org.testng:testng:6.14.3"
}
tasks.register("allJar", com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) {
manifest {
attributes "Main-Class": "shadow_test.Main"
}
from sourceSets.main.output
configurations = [project.configurations.runtimeClasspath, project.configurations.provided]
zip64 true
mergeServiceFiles()
with jar
}
test {
useTestNG()
}
Gradle 版本是 7.3.3
可以在https://github.com/SashaOv/shadow-jar-repro找到重現此問題的最小專案的完整代碼
感謝任何線索
uj5u.com熱心網友回復:
Gradle 社區解決了這個問題:https ://discuss.gradle.org/t/possible-to-build-spark-fat-jar-with-gradle/42235/2?u=sashao
我缺少簽名檔案的排除項:
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.SF'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427920.html
