库损坏了类路径?

Xobotun:

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

compile 'org.locationtech.spatial4j:spatial4j:0.7'在我的gradle项目的依赖项列表中添加a 会导致类路径损坏。当我注释掉该库并运行java -verbose:class -jar sol_backend_full.jar > ok.log它时,将输出4399行的类条目。但是,在类路径中使用该库时,java -verbose:class -jar sol_backend_full.jar > failed.log仅输出953行,其中大多数是java.lang.*or sun.*

它显然导致Error: Could not find or load main class

anyone有没有人遇到过这种奇怪的行为?


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

有问题的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
}
SKumar:

JAR依赖org.locationtech.spatial4j:spatial4j:0.7是一个签名的jar。创建胖子罐时,Java Classloader无法从胖子罐中加载其他类,因为这些未签名。

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

请参考-Gradle-FatJar-无法找到或加载主类

就像以上文章中提到的,您可以排除以下签名-

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依赖项移出胖子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章