gpt4 book ai didi

java - 库损坏了类路径?

转载 作者:行者123 更新时间:2023-12-03 05:03:29 25 4
gpt4 key购买 nike

我从未见过一个奇怪的问题。
在我的gradle项目的依赖项列表中添加compile 'org.locationtech.spatial4j:spatial4j:0.7'会导致类路径损坏。当我注释掉该库并运行java -verbose:class -jar sol_backend_full.jar > ok.log时,它将输出4399行的类条目。但是,在类路径中使用该库时,java -verbose:class -jar sol_backend_full.jar > failed.log仅输出953行,其中大多数是java.lang.*sun.*
显然会产生Error: Could not find or load main class
anyone有没有人遇到过这种奇怪的行为?

当然,我可以用另一个空间库代替该库,但是发生的事情很奇怪。仅在此库中会发生这种情况,删除/添加其他任何库都可以。
有问题的Gradle版本是5.5.1,该库 list 看起来有点长,但一点也不可疑。退回4.8也会重现它。
这是构建脚本:

task customFatJar(type: Jar) {
manifest {
attributes 'Main-Class': 'ru.rxproject.sol.backend.BackendApplication',
'Implementation-Version': version + System.getenv('BUILD_NUMBER').toString(),
'Commit-Hash': 'git-' + System.getenv('GIT_COMMIT'),
'Build-Date': java.time.LocalDateTime.now().toString()
}
archiveName = 'sol_backend_full.jar'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}

最佳答案

JAR依赖org.locationtech.spatial4j:spatial4j:0.7是一个签名的jar。创建胖子 jar 时,Java Classloader无法从胖子 jar 中加载其他类,因为这些未签名。
因此,如果不排除签名,就无法创建具有这种依赖关系的胖子。
请引用-Gradle - FatJar - Could not find or load main class
如上述文章中所述,您可以排除以下签名-

jar {
manifest {
attributes "Main-Class": mainClassName
}

from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
exclude 'META-INF/*.RSA'
exclude 'META-INF/*.SF'
exclude 'META-INF/*.DSA'
}
但是,我建议您不要将 jar 依赖于胖 jar 。

关于java - 库损坏了类路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63757382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com