그래들 빌드 실패: 주 클래스 이름이 구성되지 않아 확인할 수 없습니다.
저는 이 가이드를 따라 봄과 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'의 값을 계산하지 못했습니다.주 클래스 이름이 구성되지 않았으므로 확인할 수 없습니다.
이제 스프링 프레임워크 부트 플러그인의 버전에 따라 다음과 같은 방식으로 메인 클래스 값을 정의해야 합니다.
springBoot {
mainClassName = 'com.example.ExampleApplication'
}
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
'programing' 카테고리의 다른 글
올바른 사용자 이름 및 암호를 지정하여 ORA-01017 가져오기: 잘못된 사용자 이름/암호, 로그온 거부 (0) | 2023.10.19 |
---|---|
MySQL 일치하지 않는 쿼리로 인해 임시 테이블(빈 결과 집합)이 있는 절차가 발생함 (0) | 2023.10.19 |
Facebook 인앱 브라우저에서 웹사이트가 열리지 않는 경우 (0) | 2023.10.19 |
htmlentity()를 되돌리는 방법? (0) | 2023.10.14 |
C에서 빠르고 효율적인 최소 제곱 적합 알고리즘? (0) | 2023.10.14 |