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

用Spring Boot从Gradle多模块项目构建的罐子不起作用

慕容弘懿
2023-03-14

我创建了SpringBootGradle多模块项目,该项目由3个模块组成:控制器、服务、存储库。主文件位于控制器模块中,名为myspringbootplication。

我可以构建这个项目(使用GradleBuild)并获得jar文件。但是在命令行中启动这个jar之后,我遇到了下一个错误:

Error: Could not find or load main class com.epam.esm.config.MySpringBootApplication Caused by: java.lang.ClassNotFoundException: com.epam.esm.config.MySpringBootApplication.

为了修复这个错误,我添加了Main-Class属性到mainbuild.gradle中的MANIFEST. MF文件,但是这个操作没有帮助。有人能帮忙吗?

主建筑。梯度锉

        plugins {
            id 'java'
            id 'io.spring.dependency-management' version '1.0.11.RELEASE'
            id 'org.springframework.boot' version '2.4.3'
            id 'application'
        }
        
        group = 'com.myproject'
        version = 'snapshot-1.0.0'
        
        repositories {
            mavenCentral()
        }
        
        bootJar {
            enabled = false
        }
        
        jar {
            enabled = true
            manifest {
                attributes(
                        "Main-Class": "com.myproject.config.MySpringBootApplication")
            }
        }
       
     dependencies {
            implementation 'org.springframework.boot:spring-boot-starter'
            implementation group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '2.4.3', ext: 'pom'
        
        }
        
        test {
            useJUnitPlatform()
        }
        
        
        subprojects {
            apply plugin: 'org.springframework.boot'
            apply plugin: 'io.spring.dependency-management'
            apply plugin: 'java'
        
            group = 'com.epam.esm'
            version = '1.0.0'
        
            repositories {
                mavenCentral()
            }
            bootJar {
                enabled = false
            }
        
            jar {
                enabled = true
            }
            dependencies {
                implementation 'org.springframework.boot:spring-boot-starter'
                implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
                implementation 'org.springframework.boot:spring-boot-starter-hateoas'
                implementation 'org.springframework.boot:spring-boot-starter-actuator'
                implementation 'org.springframework.boot:spring-boot-starter-security'
                testImplementation 'org.springframework.boot:spring-boot-starter-test'
                implementation group: 'org.hibernate', name: 'hibernate-envers', version: '5.4.27.Final'
                implementation group: 'javax.validation', name: 'validation-api', version: '2.0.1.Final'
                implementation group: 'org.openidentityplatform.commons', name: 'json-web-token', version: '2.0.11'
                compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.18'
                annotationProcessor 'org.projectlombok:lombok'
                implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'
                implementation group: 'org.springframework.boot', name: 'spring-boot-starter-parent', version: '2.4.3', ext: 'pom'
            }
            test {
                useJUnitPlatform()
            }
        }

设置。格拉德尔

    rootProject.name = 'module'
    include('repository', 'service', 'controller')

共有1个答案

王兴庆
2023-03-14

Spring Boot应用程序可执行jar文件是由bootJar任务构建的,因此通过jar添加主类信息也不起作用。

bootJar任务尝试创建一个可执行的jar,这需要一个main()方法。因此,您需要禁用bootJar任务,并仅为您的无可执行jar模块启用jar任务(创建普通jar而不是可执行jar)。

由于您是在子项目部分下完成的,控制器模块也将生成一个标准jar。您可以为所有模块(不包括控制器模块)生产标准JAR,如下所示:

subprojects {
    
    if (it.name != 'controller') {
        bootJar {
            enabled = false
        }

        jar {
            enabled = true
        }
    }
}    

此外,您还必须删除下面的jar部分

 jar {
        enabled = true
        manifest {
            attributes(
                    "Main-Class": "com.myproject.config.MySpringBootApplication")
        }
    }

替换

bootJar {
    enabled = false
}

具有

    bootJar {
        mainClassName = 'com.myproject.config.MySpringBootApplication'
    }

参考文献

创建多模块项目

 类似资料:
  • 主要内容:1- 介绍,2- 示例模型,3-创建项目数学库,4- 创建另一个项目:MathWebApp,5- 创建GradleMain项目,6- 构建项目,7- 运行MathWebApp1- 介绍 本教程文章基于: Eclipse Java EE IDE for Web Developers. Version: Mars.1 Release (4.5.1) 如果您是初学者Gradle的。那么建议先看看初学者Gradle(Gradle Hello world)的文章: http://www.yiib

  • 我正在创建一个新项目(使用IntelliJ IDEA),该项目将使用: 分级作为构建系统 构建脚本的Kotlin DSL “组织”的Java 9模块 科特林语作为主要语言 我有问题设置Gradle正确地建立我的项目。我找到的大多数示例都是针对Groovy而不是Kotlin DSL的,而且大多数示例只覆盖了我想要的一些特性,而不是全部。 lib/build.gradle.kts 执行此操作时,配置将

  • 我按照以下指南将项目分为模块/子项目: https://docs.gradle.org/current/userguide/multi_project_builds.html 在主脚本中,我应用子项目的配置: 如果我从根build目录运行子项目build,这会很好: (成功构建

  • 本文向大家介绍详解IDEA下Gradle多模块(项目)的构建,包括了详解IDEA下Gradle多模块(项目)的构建的使用技巧和注意事项,需要的朋友参考一下 我们在新起一个项目的时候,一般都会建多个子项目(IDEA里面称之为Module模块)。通过Gradle构建,多个Module之间需要将公用的配置抽取到全局,子项目中只写差异化的配置,以便于维护。 多模块项目的Gradle目录结构 示例:我的示例

  • 嗨我在网上搜了一遍,看了一堆文章,所以问题和文档都找不到解决办法,这里是我的问题。 我有一个多模块maven项目,其中包含三个模块a、B和C,a和B独立,C依赖于a和B,当然我有一个父项目。我还设置了一个jenkins服务器来构建这些项目,以及一个nexus存储库。 如有任何帮助,不胜感激。谢谢!

  • 我有一个多模块java项目,我想在其中创建jar(bin、source、javadoc),但我很难从子项目配置中的子项目中获取变量。 这是我在根项目中的build.gradle文件: 这就是建筑。gradle文件子项目之一: 当我想运行构建脚本时,我得到了以下异常: 无法获取类型为org的对象的未知属性“mainClassName”。格雷德尔。应用程序编程接口。JAVA档案内部的默认舱单。 在子流