Programing

실행 가능한 jar에 사용할 기본 클래스를 Spring Boot에 알리려면 어떻게합니까?

알 수 없는 사용자 2020. 5. 30. 09:07
반응형

실행 가능한 jar에 사용할 기본 클래스를 Spring Boot에 알리려면 어떻게합니까?


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 플러그인에 어떤 클래스를 기본 클래스로 사용해야하는지 어떻게 알 수 있습니까?


응원단에 시작 수업을 추가하십시오.

<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 {
    mainClassName = 'com.example.ExampleApplication'
}

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

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

pom에서 spring-boot-starter-parent를 사용하는 경우 간단히 pom에 다음을 추가하십시오.

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

Then do your mvn package.

See this Spring docs page.

A very important aspect here is to mention that the directory structure has to be src/main/java/nameofyourpackage


I tried the following code in pom.xml and it worked for me

<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>


I had renamed my project and it was still finding the old Application class on the build path. I removed it in the 'build' folder and all was fine.


Since Spring Boot 1.5, you can complete ignore the error-prone string literal in pom or build.gradle. The repackaging tool (via maven or gradle plugin) will pick the one annotated with @SpringBootApplication for you. (Refer to this issue for detail: https://github.com/spring-projects/spring-boot/issues/6496 )


Have seen this issue with Java 1.9 and SpringBoot 1.5.x, when main-class is not specified explicitly.

With Java 1.8, it is able to find main-class without explicit property and 'mvn package' works fine.

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

반응형