Spring Boot Maven 플러그 인 패키지 이상 솔 루 션

【배경】spring-boot 프로젝트 는 실행 가능 한 jar 로 포장 되 어 있 습 니 다.프로젝트 안에 main 방법 이 있 는 두 가지 종류 가 있 고 모두@SpringBootApplication 주 해 를 사 용 했 습 니 다.

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>1.5.3.RELEASE</version>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
    </execution>
  </executions>
</plugin>
[문제]
화면 음악 n clean package 를 실행 하고 다음 과 같이 오 류 를 보고 합 니 다.spring-boot:repackage 목표(goal)(다음 글 에서 말 할 것)는 package 구축 단계(phases)에 연결 되 어 있 으 며,package 단 계 는 install 단계 이전에 지정 한 구축 단계 가 실 행 됩 니 다.상세 참조:Introduction to the Build Lifecycle)
  [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:repackage (default) on project webapps-api-bid: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:repackage failed: Unable to find a single main class from the following candidates [com.xx.api.main.ApiBidMain, com.xx.webapps.api.main.WebappsApiBidMain]
화면 음악 n clean package spring-boot:repackage 를 실행 합 니 다.
  [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:repackage (default) on project webapps-api-bid: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.3.RELEASE:repackage failed: Unable to find main class
[해결]
Note:참고홈 페이지 설명를 지정 하지 않 았 거나 spring-boot-start-parent 를 계승 하 였 으 며속성 이 설정 되 지 않 았 을 때 자동 으로 서명 이 Public static void main(String[]args)인 방법 을 찾 습 니 다.그래서 플러그 인 이 멍 합 니 다.두 여동생 은 누구 와 함께 있 습 니까?
[추천]일반적인 해결 방법:에서 mainClass 를 설정 하고 프로그램 입 구 를 지정 합 니 다.

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>1.5.3.RELEASE</version>
  <configuration>
    <mainClass>com.xx.webapps.api.main.WebappsApiBidMain</mainClass>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
    </execution>
  </executions>
</plugin>
Spring Boot Maven Plugin 은 몇 가지 목표(goal)를 제공 합 니 다.탭 에 설 치 된repackage은 spring-boot:repackage 라 는 목표 에 대응 합 니 다.
  • repackage: create a jar or war file that is auto-executable. It can replace the regular artifact or can be attached to the build lifecyle with a separate classifier.
  • run: run your Spring Boot application with several options to pass parameters to it.
  • start and stop: integrate your Spring Boot application to the integration-test phase so that the application starts before it.
  •   The plugin rewrites your manifest, and in particular it manages theMain-ClassandStart-Classentries, so if the defaults don't work you have to configure those there (not in the jar plugin). TheMain-Classin the manifest is actually controlled by thelayoutproperty of the boot plugin
    이 플러그 인 은 목록 파일(MANIFEST.MF,즉 jar 에 있 는 목록 파일)을 다시 썼 습 니 다.이 파일 은 주 클래스(Main-Class)와 시작 클래스(Start-Class)입 구 를 관리 합 니 다.목록 파일 의 Main-Class 는 layot 에서 제어 합 니 다.
    이곳 의 Start-Class 는 우리 가 설정 한입 니 다.Main-Class 는 layot 속성의 통 제 를 받 습 니 다.이름 에 헷 갈 리 지 마 세 요.(이상 하지 않 습 니까?해결 방법 을 보면 왜 이렇게 기괴 한 지 알 수 있다)............................................................................
      
    layot 속성 은 기본적으로 설정 이 필요 하지 않 습 니 다.플러그 인 은 자동 으로 추 정 됩 니 다.layot 속성 목록 파일 에 있 는 Main-Class 도 달라 집 니 다.예 를 들 어 layot 가 JAR 에 대응 하 는 Main-Class 를 설정 하지 않 거나 설정 한 것 은 JarLauncher 이 고 layot 가 WAR 에 대응 하 는 Main-Class 는 WarLauncher 입 니 다.
    [제한 조건 있 음]해결 방법 2:만약 당신 의 pom 이 spring-boot-starter-parent(이 전제 에 주의 하 십시오)를 계승 한다 면,를 직접 설정 할 수도 있 습 니 다.(사실 이곳 의 start-class 는 목록 파일 에 있 는 Start-Class 에 직접 대응 합 니 다.)
    
    <properties>
      <start-class>com.xx.webapps.api.main.WebappsApiBidMain</start-class>
    </properties>
    해결 방법 3:포장 할 때 다른@SpringBootApplication 에 주석 을 달 거나....................................................................................
    [아무 말 이나]
    spring-boot:repackage 라 는 목 표를 말 해 보 세 요.Spring Boot Maven Plugin 이 플러그 인 은 일련의 목표(goal)를 포함 하고 있 습 니 다.탭 에 설 치 된repackage은 spring-boot:repackage 라 는 목 표를 보 세 요공식 소개:
      spring-boot:repackage repackages your jar/war to be executable.
      Repackages existing JAR and WAR archives so that they can be executed from the command line using java -jar. Withlayout=NONEcan also be used simply to package a JAR with nested dependencies (and no main class, so not executable).
    쉽게 말 하면 이 물건 은 실행 가능 한 jar/war 를 다시 포장 하여 명령 행 에서 사용 할 수 있 습 니 다.-jar 에서 실행 할 수 있 습 니 다.layot 를 NONE 로 지정 하면 주 류 는 없고 일반적인 jar(실행 불가)만 칩 니 다.일반적으로 이렇게 하지 않 습 니 다.
    일반적인 경우,이 목 표 는 새로운 jar/war 를 치고,maven 의 기본 값 인 jar/war 를.original 접 두 사 를 추가 합 니 다.target 디 렉 터 리 에서 볼 수 있 습 니 다:

    [참고]
    1. https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/
    2. https://docs.spring.io/spring-boot/docs/2.0.0.BUILD-SNAPSHOT/maven-plugin//repackage-mojo.html
    3. https://stackoverflow.com/questions/23217002/how-do-i-tell-spring-boot-which-main-class-to-use-for-the-executable-jar
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기