source

Spring Boot에 실행 가능한 jar에 사용할 메인클래스를 지시하려면 어떻게 해야 하나요?

manysource 2022. 11. 14. 21:47

Spring Boot에 실행 가능한 jar에 사용할 메인클래스를 지시하려면 어떻게 해야 하나요?

Execution default of goal 
org.springframework.boot:spring-boot-maven-plugin:1.0.1.RELEASE:repackage 
failed: 
Unable to find a single main class from the following candidates

내 프로젝트에는 두 개 이상의 클래스가 있으며main방법.Spring Boot Maven 플러그인에서 메인 클래스로 사용해야 하는 클래스를 알려면 어떻게 해야 하나요?

시작 클래스를 POM에 추가합니다.

<properties>
    <!-- The main class to start by executing java -jar -->
    <start-class>com.mycorp.starter.HelloWorldApplication</start-class>
</properties>

또는

<build>
<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>             
        <configuration>    
            <mainClass>com.mycorp.starter.HelloWorldApplication</mainClass>
        </configuration>
    </plugin>
</plugins>
</build>

Maven이 아닌 Gradle을 사용하는 경우:

springBoot {
    mainClass = "com.example.Main"
}

spring-boot-starter-parent pom을 사용하지 않을 경우 Spring 매뉴얼에서 다음 절차를 수행합니다.

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>1.1.3.RELEASE</version>
    <configuration>
        <mainClass>my.package.MyStartClass</mainClass>
        <layout>ZIP</layout>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Maven이 아닌 Gradle을 사용하는 사용자는 다음을 참조하십시오.

기본 클래스는 태스크의 mainClassName 속성을 사용하여 명시적으로 구성할 수도 있습니다.

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

또는 Spring Boot DSL의 mainClassName 속성을 사용하여 프로젝트 전체에서 메인클래스 이름을 설정할 수도 있습니다.

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

폼에 spring-boot-starter-parent를 사용하는 경우 폼에 다음 항목을 추가합니다.

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

그런 다음 mvn 패키지를 실행합니다.

이 Spring 문서 페이지를 참조하십시오.

여기서 매우 중요한 것은 디렉토리 구조가 src/main/java/name of your package여야 한다는 것입니다.

pom.xml에서 다음 코드를 시도해보니 효과가 있었다.

<build>
<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <mainClass>myPackage.HelloWorld</mainClass> 
        </configuration>
    </plugin>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <fork>true</fork>
            <executable>D:\jdk1.8\bin\javaw.exe</executable>
        </configuration>
    </plugin>
</plugins>

Spring Boot 1.5 이후 pom 또는 build.gradle에서 오류가 발생하기 쉬운 문자열 리터럴을 완전히 무시할 수 있습니다.리패키지 툴(매븐 또는 그래들플러그인 경유)은 다음과 같은 주석이 달린 것을 선택합니다.@SpringBootApplication(자세한 것은, 이 호를 참조해 주세요.https://github.com/spring-projects/spring-boot/issues/6496 )

나는 내 프로젝트의 이름을 바꿨고 그것은 여전히 오래된 것을 찾고 있었다.Application빌드 경로의 클래스입니다.'빌드' 폴더에서 삭제했더니 아무 문제 없었어요.

Java 1.9 및 SpringBoot 1.5.x에서 메인 클래스가 명시적으로 지정되지 않은 경우 이 문제가 발생하였습니다.

Java 1.8에서는 명시적 속성 없이 메인 클래스를 찾을 수 있으며 'mvn 패키지'는 정상적으로 작동합니다.

Grade를 사용하는 경우 'java' 플러그인이 아닌 'application' 플러그인을 적용할 수 있습니다.이를 통해 스프링 부트 그래들 플러그인 작업을 사용하지 않고 다음과 같이 메인 클래스를 지정할 수 있습니다.

plugins {
  id 'org.springframework.boot' version '2.3.3.RELEASE'
  id 'io.spring.dependency-management' version '1.0.10.RELEASE'
  id 'application'
}
application {
  mainClassName = 'com.example.ExampleApplication'
}

이점으로서는, 다음의 방법으로 애플리케이션을 실행할 수 있습니다.gradle rungradle에 의해 자동으로 설정된 클래스 패스를 사용합니다.또한 플러그인은 운영 체제 고유의 시작 스크립트를 포함하여 애플리케이션을 TAR 및/또는 ZIP로 패키지합니다.

언급URL : https://stackoverflow.com/questions/23217002/how-do-i-tell-spring-boot-which-main-class-to-use-for-the-executable-jar