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

Gradle多项目配置:无法找到或加载主类

司徒墨竹
2023-03-14

我正在使用Gradle构建一个项目,但是每当我想通过java-JAR手动启动JAR时

我已经发现我需要在Gradle项目中添加以下行:

mainClassName = 'projectz.ProjectZ'

jar {
    manifest {
        attributes('Main-Class': project.mainClassName)
    }
}

然而,这并不能解决问题。我不能执行我的罐子。用我的IDE(eclipse)构建同一个jar给了我一个工作的jar。将我的META-INF文件夹复制粘贴到Gradle生成的我的JAR中也不能解决问题。

对于我的设置,我使用以下插件:

plugins {
    id 'java'
    id 'application'
    id 'eclipse'
    id 'idea'
}

我的项目还依赖于通过Gradle依赖项导入的另一个项目(因为这是一个多项目设置):编译项目(': Lib')这个依赖项也没有添加到我的jar文件中,但是当我运行InstDistwiting Gradle时,它被添加,我可以启动我的JAR(只考虑Gradle放在文件夹中的一些批处理文件),java突然找到我的主类(它不是依赖项的一部分,而是主项目的一部分)。试图在正常的java-jar上运行我的jar文件

我搜索java给我的错误,并将丢失的行添加到我的build.gradle文件中,认为这并不能解决我的问题。我还在Gradle留档中搜索,以确定我是否遗漏了一些东西,但找不到任何丢失的东西。

  • 全新Java 8安装(我的项目使用)

共有1个答案

璩珂
2023-03-14

您使用Gradle构建脚本生成的jar是一个标准jar,而不是一个胖jar(请参阅胖jar描述),这就是为什么您不能使用java-jar直接执行此jar

因此,您应该更改您的buidld脚本以获取一个胖罐子,或者使用由应用程序gradle插件生成的打包应用程序。

对于构建胖罐子,您有不同的解决方案,例如:

mainClassName = "org.mycompany.gradle.MainApp"
jar {
    manifest {
        attributes('Main-Class': project.mainClassName)
    }
    // HERE : include dependencies into the jar 
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

其他解决方案可以在那里找到:https://www.baeldung.com/gradle-fat-jar

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

  • 我试图复制Spring Boot Kotlin示例项目https://github.com/jetbrains/kotlin-examples/tree/master/tutorials/spring-boot-restful。我添加了更多的依赖项,当我试图构建可执行jar并运行它时,我得到了错误:

  • 我遇到一个问题,gradle fatJar/uberJar在尝试运行jar时导致以下异常: 简单的jar任务 没有问题(直到它开始需要依赖项)。 我假设这与我的一个依赖项更改类路径有关,但我不确定为什么会发生这种情况。 build.gradle的相关部分 Gradle构建文件在这里(与代码的其余部分): https://github.com/domhauton/membraned/blob/mas

  • 这是我的build.gradle文件: 有什么办法解决这个问题吗?对于mainClassName属性,我尝试了各种方法,但似乎都不起作用。

  • 我刚刚从spring boot版本“2.2.1.RELEASE”更新到了2.5.6,同时我也将gradle版本更新到了7.0。在更新之前一切正常,但是在更新之后,bootRun任务似乎没有找到主类。 这是收到的错误: 在此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 8.0 不兼容。使用“--警告模式全部”来显示各个弃用警告。查看 https://docs.gradle.org/

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