java - 无法使用 gradle 生成的 jar 文件找到或加载主类

标签 java gradle jar

我在这个阶段停留了几个小时,无法弄清楚我错过了什么。也许有人看到了明显的错误......

第一步,我使用 gradle 构建一个 jar 文件:

jar {
    manifest {
        attributes(
                'Main-Class': 'ch.hsr.ebos.offliss.server.Main',
                "Class-Path": configurations.compile.collect { it.getName() }.join(' ')
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

我让 gradle 构建 jar 文件,当您尝试执行它时,会出现以下错误消息:

java -jar build/libs/server.jar 
Error: Could not find or load main class ch.hsr.ebos.offliss.server.Main

当您解压 jar 文件的内容时,会出现META-INF/MANIFEST.MF:

Manifest-Version: 1.0
Class-Path: 
Main-Class: ch.hsr.ebos.offliss.server.Main

以及 ch/hsr/ebos/offliss/server 目录下的 Main.class 文件。

不确定缺少什么,也不知道下一步。该错误在堆栈溢出上很常见,但其他问题和答案到目前为止对我没有帮助。

整个源代码是开源的,可在此处获取:

最佳答案

最终通过将 gradle 构建配置更改为以下内容解决了该问题:


jar {
    manifest {
        attributes(
                'Main-Class': 'ch.hsr.ebos.offliss.server.Main'
        )
    }
}


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

关于java - 无法使用 gradle 生成的 jar 文件找到或加载主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991617/

相关文章:

java - 从 Java 运行 bash 文件不起作用

java - 为什么我看到枚举常量的字段值确实被序列化/反序列化?在哪种情况下以及什么内容没有在枚举中序列化?

java - Weblogic EAR 类加载

java - 发现多个文件具有独立于操作系统的路径 'lib/arm64-v8a/librealm-jni.so'

java - Gradle 未编译 lib 文件夹中的依赖项 jar

java - 我们可以将组合框、单选按钮、文本字段、表格放在文本区域吗?

react-native - 错误 "Could not create task ' :app:mergeDebugResources'"during building after upgrading React-Native up to 0. 59.0

android - 发布 GitHub 包返回 422 错误

Java 反射性能在打包为 jar 时下降

java - Eclipse : The type VertexNotFoundException could not be resolved. It is indirectly referenced from required .class files