我正试着用格雷德做一个火花罐。构建成功,但文件以一种微妙的方式损坏:尝试运行它会产生:
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
谢谢你的线索
该问题由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'
问题内容: 我使用Eclipse在Windows 7中创建了一个jar文件。当我尝试打开jar文件时,它说jar文件无效或损坏。谁能建议我为什么jar文件无效? 问题答案: 当您在Windows资源管理器中双击一个JAR文件时,会发生这种情况,但是JAR本身实际上不是 可执行的 JAR。真正的可执行JAR至少应具有带有方法的类,并在中引用它。 在Eclispe中,您需要将项目导出为 Runnabl
问题内容: 在将Maven jFree依赖项添加到现有应用程序后,我将无法执行创建的jar。 我收到的唯一错误消息如下: 完整的外观如下所示: 如果执行jar,则不会得到其他任何调试信息。 是否可以验证jarfile?或有类似…的东西? 重现步骤: 新建一个文件夹 从上方将Pom.xml复制到该文件夹中。 保存小的`public static void main(…)。进入src / main
问题内容: 在构建战争文件时,我正在将一组罐子从某个位置复制到战争中的文件夹中。虽然文件确实会被复制,但是我认为它们已损坏,因为在战争之外被带出的jar的相同类文件会使用调试器打开,而从war文件中取出后不会打开。 这是我的战争pom.xml的一部分,我在其中复制了罐子 SomeSourceDirectory 有一些jar和其他文件结果是:myWar / somefolder / a.jar,但是
HTSJDK是一个用于访问常见文件格式(如SAM和VCF)的库。我想构建HTSJDK JAR。在文档页面中说我必须为此使用Ant。所以我安装了Ant并运行以下命令: ant htsjdk-jar [javac]用法:javac [javac]use-help获取可能选项列表 生成失败 build.xml文件有问题。这里是文件的开头: 拜托,有人能告诉我该怎么做才能解决这个问题吗?
我通过spring-boot-maven-plugin(V1.3.6)创建完全可执行的jar,方法如下: 当我从目标目录启动类似于可执行文件的结果jar(类似于“./app.jar”,而不是通过“java-jar app.jar”)时,应用程序可以正确地启动和工作,但是如果我将此jar复制到另一个目录,我会得到错误:“无效或损坏的jar文件/home/user/spring”。(我使用Linux
我在一个maven项目中遇到了一个问题,在这个项目中,我从src/main/Resources/lib文件夹分发dlls。 该项目使用maven assembly插件构建为一个具有依赖项的jar。 不幸的是,maven进程正在复制过程中损坏我的dll库,因此它们对应用程序不再有用。 我已经了解了资源过滤等概念。 这是我的相关pom。xml 有人有什么想法吗? 我想我需要做一些像这样的事情,但到目前