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

时间:2019-05-05 11:51:11

标签: 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

和Main.class文件位于目录 ch / hsr / ebos / offliss / server 下。

不确定什么丢失了,不知道进一步。该错误在堆栈溢出时很常见,但到目前为止,其他问题和解答仍无济于事。

整个源代码都是开源的,可以在这里找到:

2 个答案:

答案 0 :(得分:0)

通过将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
}

答案 1 :(得分:0)

您可以简单地将jar和fatJar结合使用:

jar {
    manifest {
        attributes(
                'Main-Class': "org.cip4.tools.alces.swingui.Alces"
        )
    }
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    } {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
}