Java 库破坏了类路径?

Java 库破坏了类路径?,java,gradle,classpath,Java,Gradle,Classpath,有一个奇怪的问题我从未见过 在my gradle项目的依赖项列表中添加编译'org.locationtech.spatial4j:spatial4j:0.7'会导致类路径损坏。当我注释掉该库并运行java-verbose:class-jar sol\u backend\u full.jar>ok.log时,它输出4399行类条目。但是,在类路径中使用该库时,java-verbose:class-jar sol\u backend\u full.jar>失败。log仅输出953行,其中大部分是ja

有一个奇怪的问题我从未见过

在my gradle项目的依赖项列表中添加
编译'org.locationtech.spatial4j:spatial4j:0.7'
会导致类路径损坏。当我注释掉该库并运行
java-verbose:class-jar sol\u backend\u full.jar>ok.log
时,它输出4399行类条目。但是,在类路径中使用该库时,
java-verbose:class-jar sol\u backend\u full.jar>失败。log
仅输出953行,其中大部分是
java.lang.
sun.

这显然会导致
错误:无法找到或加载主类

➥ 有人遇到过这种奇怪的行为吗


当然,我可以用另一个空间库来代替这个库,但是发生的事情很奇怪。这只会发生在这个库中,删除/添加任何其他库都可以

所讨论的Gradle版本是
5.5.1
,库清单看起来有点长,但一点也不可疑。退回到
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类加载器无法从胖jar加载其他类,因为这些类没有签名

因此,如果不排除签名,就无法创建具有这种依赖性的胖罐子

请参阅-

就像上面的帖子中提到的,你可以排除以下签名-

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中。

我不确定是否遵循,但您怀疑
spatial4j-0.7。jar
库可能引用了实际不在类路径上的类?嗯,可能是一些常见的api接口。我刚刚尝试了
实现
范围,但它仍然破坏了启动:/以下是包含库的失败生成的输出:。以下是成功的一个,库导入已被注释掉:。第二个加载了更多的类。感觉好像有什么东西写了“classpath=null”并破坏了构建。但我从来没有遇到过这样的问题。如果你能告诉我怎么做,我很乐意提供更好的日志@Xobotun更新了答案,这个问题解决了吗?我从来没有听说过有签名的JAR。谢谢你教我他们的存在是的,我计划将所有依赖项移出胖罐子,但不是很快。有道理,
java
不想启动我的fat jar,因为它与签名不匹配。再次感谢你,它像一个魅力!