Spring Boot找不到主类多模块

Posted

技术标签:

【中文标题】Spring Boot找不到主类多模块【英文标题】:Spring Boot Can't find main class Multi module 【发布时间】:2018-11-01 19:37:30 【问题描述】:

我很难告诉 Spring Main 类的位置。到目前为止,我只设法正确指定它在图片服务模块中的位置(即图片服务/src/main/com.bachadiff.application/Application.java)

这是文件结构。

这是主要的 gradle 文件。

       buildscript 
        repositories 
            mavenCentral()
        
        dependencies 
            classpath("org.springframework.boot:spring-boot-gradle-plugin:2.0.2.RELEASE")
        
    

  plugins 
      id 'java'
      id 'java-library'
      id 'idea'
      id "org.springframework.boot" version "2.0.2.RELEASE"
      id "io.spring.dependency-management" version "1.0.5.RELEASE"
  

    bootJar 
        baseName = 'com.bachadiff.pictures-service'
        version = '0.1.0'
        mainClassName = 'com.bachadiff.application.Application'

    
    version = '0.1.0'

    repositories 
        mavenCentral()
    

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    ext.common = [
            spring_web  : 'org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE',
            spring_rest : 'org.springframework.boot:spring-boot-starter-data-rest:2.0.2.RELEASE',
            spring_mongo: 'org.springframework.boot:spring-boot-starter-data-mongodb:2.0.2.RELEASE',
            spring_test : 'org.springframework.boot:spring-boot-starter-test'
    ]

    ext.test = [
            junit: 'junit:junit:4.12'
    ]

    dependencies 
        api 'org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE'
        api 'org.springframework.boot:spring-boot-starter-data-rest:2.0.2.RELEASE'
        api 'org.springframework.boot:spring-boot-starter-data-mongodb:2.0.2.RELEASE'
        compile project(':pictures-service-impl')
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    

【问题讨论】:

我对spring一点也不熟悉,但是你试过用mainClassName = 'com.bachadiff.application.Application'代替吗?您可以通过右键单击所选类然后选择“复制参考”来获取您需要使用的字符串 我可以得到字符串,它和你说的完全一样,但是当我把它放在主要的 build.gradle 中时它仍然找不到它。 (mainClassName = com.bachdiff.application.Application,或 mainClassName = pictures-service-applications.com.bachadiff.application.Application) 【参考方案1】:

mainClassName 应该由包和类名本身组成,所以在你的情况下应该是:

mainClassName = 'com.bachadiff.application.Application'

既然你说你有一个多项目构建,你应该把它放在build.gradlepictures-service-application 项目中

【讨论】:

当我说多模块时,我指的是 Intellij 模块。 (jetbrains.com/help/idea/creating-and-managing-modules.html)。当我将 mainClassName 放在应用程序模块中时,gradlew build 失败,manifest 属性不能为 null 你使用的是 Spring Boot 1 还是 2? 我使用的是 Spring Boot 2 你可以尝试使用springBoot 任务来配置它吗:springBoot mainClassName = 'com.bachdiff.application.Application' 我得到一个编译错误,说它找不到 mainClassName 是一个未知属性。

以上是关于Spring Boot找不到主类多模块的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot gradle“找不到或加载主类”

spring boot错误: 找不到或无法加载主类

spring boot 启动报错:找不到或无法加载主类

idea启动spring boot无法加载或找不到主类

执行目标 org.springframework.boot:spring-boot-maven-plugin:2.4.4:repackage failed: 找不到主类的 default-cli

Launch4J 插件创建一个 EXE(连同 JAR),但 EXE 在 Spring boot 中找不到主类