当前位置: 首页 > 知识库问答 >
问题:

Gradle fatJar/uberJar无法找到或加载主类

苏波涛
2023-03-14

我遇到一个问题,gradle fatJar/uberJar在尝试运行jar时导致以下异常:

Error: Could not find or load main class com.domhauton.membrane.Main

简单的jar任务

from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar

没有问题(直到它开始需要依赖项)。

我假设这与我的一个依赖项更改类路径有关,但我不确定为什么会发生这种情况。

build.gradle的相关部分

project.version = '1.0.0-alpha.2'
project.group = 'com.domhauton.membrane'

jar {
    baseName = 'membrane-daemon-simple'
    version = project.version
    manifest {
        attributes 'Implementation-Title': 'Membrane Daemon',
                'Implementation-Version': project.version,
                'Main-Class': project.group + '.Main'
    }
}

//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Membrane Daemon',
                'Implementation-Version': project.version,
                'Main-Class': project.group + '.Main'
    }
    baseName = 'membrane-daemon'
    version = project.version
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    with jar
}

Gradle构建文件在这里(与代码的其余部分):

https://github.com/domhauton/membraned/blob/master/build.gradle

META-INF文件夹中充满了来自其他依赖项的文件,因此我不确定从何处开始查找冲突。

共有1个答案

胡厉刚
2023-03-14

再一次尝试了这个问题,并使用了阴影罐,它工作得完美无瑕。

相关代码:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath group: 'com.github.jengelman.gradle.plugins', name: 'shadow', version: '1.2.4'
    }
}

apply plugin: 'com.github.johnrengelman.shadow'

project.version = '1.0.0-alpha.2'
project.group = 'com.domhauton.membrane'

jar {
    baseName = 'membrane-daemon'
    version = project.version
    manifest {
        attributes 'Implementation-Title': 'Membrane Daemon',
                'Implementation-Version': project.version,
                'Main-Class': project.group + '.Main'
    }
}

可以在上下文中看到:https://github.com/domhauton/membraned/blob/4d28ea451acc5bf52724a0cc5c94823659236287/build.gradle

 类似资料:
  • 问题内容: 我正在尝试使用Gradle运行一个非常简单的项目,并在使用时遇到以下错误: 这是我的文件结构: 我排除了libs和tmp文件夹的内容,因为我认为这与该问题无关,但是我可以在需要时添加它。 这是我的build.gradle文件: 关于如何解决此问题的任何想法?我已经为mainClassName属性尝试了各种方法,但似乎没有任何效果。 问题答案: 我在这里看到两个问题,一个与另一个有关。

  • 我的java应用程序编译有问题。 编译器说:

  • 我是按照Spring的教程,一切都工作正常,直到我克隆我的项目,现在克隆的项目和原来的项目不想工作,我已经搜索槽整个堆栈溢出类似的问题,我无法解决这个问题,我已经清理了项目,重新启动eclipse,更新,添加和删除依赖项从pom.xml似乎没有什么工作。 这是我的主要课程: Beans.xml: 波姆。xml: 正如我所说,当我在同一个工作区复制粘贴项目时,一切都开始失败,当然我更改了名称。 这个

  • 我用的是软呢帽19。HelloWorld的内容。爪哇: 我可以使用 javac HelloWorld。JAVA 但我无法使用 java HelloWorld 它给出了以下错误 错误:无法找到或加载主类HelloWorld 但我可以用 sudo java HelloWorld 我错过了什么???

  • 我知道这个问题已经被回答过很多次了,但不幸的是我找不到我的问题的正确答案。 以下是我的软件包结构,在我的软件包中,我有简单测试.java d: \junit\src\junitfaq\SimpleTest.java 在d:\junit\src内部 d:\junit\src 但是当我尝试使用下面的命令行运行程序时 d:\junit\src 发生了此错误。错误:无法找到或加载主类junitfaq.Si

  • 问题内容: 我想连接我的java程序以连接数据库并检索数据。它的编译完美,但运行时即时得到这个 我已经安装了Java SQL驱动程序,并将jar路径作为CLASSPATH添加到环境变量中 问题答案: 您应该从这里下载驱动程序 和JAR文件需要添加到项目类路径。 首先,右键单击Eclipse Project,然后单击Project-> Build Path-> Configure Build Pat