programing

그래들 빌드 실패: 주 클래스 이름이 구성되지 않아 확인할 수 없습니다.

instargram 2023. 10. 19. 21:51
반응형

그래들 빌드 실패: 주 클래스 이름이 구성되지 않아 확인할 수 없습니다.

저는 이 가이드를 따라 봄과 RESTful 웹 서비스를 구축하고 있습니다.그래들을 이용해 앱을 만들고 있는데 빌드가 실패하고 있습니다.

윈도우 10 기계에서 "build gradle" 명령어를 사용했습니다.

그라들 코드는 다음과 같습니다.

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

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

bootJar {
    baseName = 'gs-rest-service'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

다음 오류가 발생합니다.

작업 ':bootJar'에 대해 실행하지 못했습니다.

주 클래스 이름이 구성되지 않았으므로 확인할 수 없습니다.

스프링부트 프로젝트 외부에 모듈이 포함된 멀티모듈 프로젝트를 구축할 때, 모듈의build.gradle다음을 포함해야 합니다.

bootJar {
    enabled = false
}

jar {
    enabled = true
}

제가 코틀린을 사용할 때 이 오류가 발생했습니다.main방법.

틀렸습니다:

@SpringBootApplication
class Application {
    fun main(args: Array<String>) {
        runApplication<Application>(*args)
    }
}

수정(이동)main밖으로Application):

@SpringBootApplication
class Application

fun main(args: Array<String>) {
    runApplication<Application>(*args)
}

구성할 수 있습니다.시도해 보시기 바랍니다:

apply plugin: 'application'
mainClassName = 'com.example.WebApplication'

조직과 함께. 스프링 프레임워크와 함께.gradle 플러그인 버전 2.6.2를 부팅합니다.

plugins {
  id 'org.springframework.boot' version '2.4.0'
}

비슷한 문제가 있었습니다.

작업 ':bootJar'에 대해 실행하지 못했습니다.작업 ':bootJar' 속성 'mainClass'의 값을 계산하지 못했습니다.주 클래스 이름이 구성되지 않았으므로 확인할 수 없습니다.

이제 스프링 프레임워크 부트 플러그인의 버전에 따라 다음과 같은 방식으로 메인 클래스 값을 정의해야 합니다.

스프링 프레임워크 2.3.12 이상

springBoot {
  mainClassName = 'com.example.ExampleApplication'
}

Spring Framework 2.4.0 이상

springBoot {
  mainClass = 'com.example.ExampleApplication'
}

속성 변경에 대한 릴리스 노트

저의 경우 (스프링부트 데모 작성에 코틀린 사용) src 폴더로 인해 발생한 것으로, 메인 클래스 파일이 src/메인 폴더 아래에 위치하지 않았습니다.게다가 모든 걸 다 치우고 IDE를 다시 시작했습니다.@Zaziro님이 말씀하신 것처럼, 저 또한 시도해 보았지만, 아무런 행운도 없었습니다.하지만 config mainClassName에 언급된 기사들이 있습니다.

Github의 src 코드와 비교해보니 다른 버전의 패키지가 아닙니다.

행운을 빌어요 :-)

https://spring.io/guides/gs/multi-module/, 에 의하면 도서관의build.gradle(Spring을 사용하는) Spring Boot Plugin을 적용하지 않고 사용해야 합니다(Apply false).

plugins {
    id 'org.springframework.boot' version '3.0.0' apply false
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
}

이를 통해 다음과 같은 작업이 필요 없습니다.

bootJar {
    enabled = false
}

jar {
    enabled = true
}

또한 라이브러리를 사용하는 Spring Boot 어플리케이션의 경우 다음을 지정해야 합니다.scanBasePackages도서관 그룹과 함께:

package com.example.multimodule.application;

import com.example.multimodule.service.MyService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication(scanBasePackages = "com.example.multimodule")
@RestController
public class DemoApplication {

  private final MyService myService;

  public DemoApplication(MyService myService) {
    this.myService = myService;
  }

  @GetMapping("/")
  public String home() {
    return myService.message();
  }

  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

@Zaziro가 언급했듯이 구성을 정의할 수 있습니다.

이 사이트에서는 여러 가지 구성을 매우 잘 설명하고 있습니다. https://www.baeldung.com/spring-boot-main-class#gradle

IF YOU ARE USING KOTLIN:

클래스 이름이 바뀝니다.메인 클래스 이름에 "Kt"를 추가해야 합니다.

예: "com. example.Application" -> "com.example.응용프로그램 KT"

Spring Boot Gradle 플러그인과 Kotlin을 사용하는 경우 아래의 스니펫을 사용할 수 있습니다.

plugins {
    id("org.springframework.boot") version "2.6.7"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.5.31"
    kotlin("plugin.spring") version "1.5.31"
}

...

springBoot {
    mainClass.value("com.mycompany.MyApplication")
}

애플리케이션에 CommandLineRunner가 있는 https://spring.io/guides/gs/spring-boot/ 의 지침을 따르려고 했습니다.CommandLineRunner 내부의 코드는 클래스의 메인 메서드와 빈을 래핑한 경우에만 실행됩니다.테스트를 실행할 수는 있지만 명령줄을 통해서는 실행할 수 없습니다.컴패니언 오브젝트를 사용하여 이 문제를 해결할 수 있었습니다.

@SpringBootApplication
class TestApplication {

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            runApplication<TestApplication>(*args)
        }
    }

    @Bean
    fun commandLineRunner(ctx: ApplicationContext): CommandLineRunner {
        ...
    }
}

언급URL : https://stackoverflow.com/questions/56861256/gradle-build-failed-main-class-name-has-not-been-configured-and-it-could-not-be

반응형