gpt4 book ai didi

java - 在 IntelliJ 中使用 gradle 构建 jar。无法找到或加载主类

转载 作者:行者123 更新时间:2023-12-02 12:39:05 26 4
gpt4 key购买 nike

我遇到以下问题:我正在将 IntelliJ Idea 与 gradle 一起使用。我可以毫无问题地构建 jar,但在使用 java -jar 执行 jar 时出现无法找到或加载主类的错误。

我不认为这是版本冲突,因为 IDE 中的 java 版本与我在控制台中使用的版本相匹配。

代码的路径是gradle项目的标准路径,所以src/main/java。build.gradle 有趣的部分如下所示:

jar {
manifest {
attributes 'Implementation-Title': 'Implementation_Group_C',
'Implementation-Version': version,
'Main-Class': 'EchoServer'
}

from sourceSets.main.output
}

task fatJar(type: Jar){
manifest.from jar.manifest
classifier = 'all'
from {
configurations.runtime.collect{it.isDirectory() ? it : zipTree(it)}
} {
exclude 'META_INF/*.SF'
exclude 'META_INF/*.DSA'
exclude 'META_INF/*.RSA'
}
with jar
}

当我检查 jar 时,我发现 EchoServer.class 位于主目录中(应该是正确的,因为它的目录是 /src/main/java/EchoServer.java) META-INF/MANIFEST.MF 看起来像这样:

Manifest-Version: 1.0
Implementation-Title: Implementation_Group_C
Implementation-Version: 1.1-SNAPSHOT
Main-Class: EchoServer

对我来说看起来不错,但我仍然收到无法找到或加载主类的错误。如果有人能在这里帮助我,我将非常感激。

最佳答案

EchoServer(实际上不应该在默认包中,顺便说一句:这是不好的做法)似乎依赖于库中找到的类,但这些库不在类路径中。所以无法加载该类。

Java 在 jar 文件内加载 jar 文件。它从 jar 文件外部的 jar 文件中加载类(如果它们位于类路径中):

因此,简而言之,除非 jar 文件中的主类是从捆绑 jar 文件中读取其他类的自定义类加载器,否则 fat jar 无法工作。请注意,gradle 有一个应用程序插件,用于创建标准 Java 应用程序 zip 文件,其中包含所有库以及启动应用程序的脚本。

关于java - 在 IntelliJ 中使用 gradle 构建 jar。无法找到或加载主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45008903/

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