Spring/Spring Boot

Spring Boot > 빌드 설정 > Maven

Krevis 2024. 3. 8. 23:58

부트 1

메이븐 3.2+ 버전을 준비한다

부트 애플리케이션 실행

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>learn</groupId>
  <artifactId>learn-spring-boot1-maven</artifactId>
  <version>0.1.0</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.22.RELEASE</version>
  </parent>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
</project>

 

이 상태에서 mvn spring-boot:run으로 스프링 부트 애플리케이션을 실행할 수 있다. 하지만 다음 에러가 발생한다

Unable to find a suitable main class, please add a 'mainClass' property

 

메인 클래스를 찾을 수 없다고 하니, 메인 클래스를 추가해보자

package learn;

import org.springframework.boot.SpringApplication;

public class Application {

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

 

다시 mvn spring-boot:run 하니 다른 에러가 발생한다

Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

 

@EnableAutoConfiguration 애너테이션을 추가해보자

@EnableAutoConfiguration
public class Application {

 

아래와 같이 내장 톰캣이 8080포트로 시작되고 스프링 부트 애플리케이션도 시작된다

2024-03-09 19:22:54.340  INFO 67988 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2024-03-09 19:22:54.350  INFO 67988 --- [           main] learn.Application                        : Started Application in 8.718 seconds (JVM running for 14.057)

Executable jar로 패키징

Executable jar로 프로젝트를 패키징하기 위해 POM에 spring-boot-maven-plugin을 추가한다

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

 

$ mvn package

..
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ learn-spring-boot1-maven ---
[INFO] Building jar: /Users/nhn/IdeaProjects/learn-spring-boot1-maven/target/learn-spring-boot1-maven-0.1.0.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.5.22.RELEASE:repackage (default) @ learn-spring-boot1-maven ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
..

repackage goal이 실행된다

 

target 폴더를 보면 원래는 .jar 파일만 있어야 하는데 .jar.original 파일도 생긴다

 

터미널에서 jar tvf target/learn-spring-boot1-maven-0.1.0.jar를 실행해보면 애플리케이션 코드에 대한 클래스 파일 뿐만 아니라 라이브러리에 대한 jar 파일들도 함께 패키징된 것을 확인할 수 있다

 

이제 터미널에서 java -jar target/learn-spring-boot1-maven-0.1.0.jar 명령을 통해 스프링 부트 애플리케이션을 실행할 수 있게 된다

Fully executable jar로 패키징

POM

..
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <executable>true</executable>
        </configuration>
      </plugin>
..

 

$ mvn package

 

이제 ./application.jar로 실행 가능하고 application.conf 설정 파일이 적용된다

부트 2

추후 작성

 

부트 3

추후 작성

 

Maven Wrapper 만들기

mvn wrapper:wrapper