spring 이나 spring boot 로 개발을 진행하신다면 Maven 과 Gradle 과 같은 build tool 을 사용해보신 적이 있으실 겁니다.
Maven 이나 Gradle 이 무엇인지는 잘 알고 있지만, Wrapper 는 무엇인지 잘 모르는 경우가 많습니다.
사실 저 같은 경우도 IDE 가 아닌 별도의 서버에서 CLI 로 빌드를 하여 MAVEN 을 띄우려 했을 때 mvnw 가 어떠한 동작을 하는지 몰랐었습니다.
단순 maven 을 이용하여 빌드하고 배포할 수 있지만, 좋은 환경을 구성하기 위해 wrapper 는 필수적입니다.
Maven Warpper 란 무엇인가 ?
Maven wrapper
란 개발자들이 Maven 을 별도의 환경에서 개발할 때 local machine 에 따로 설치를 원하지 않거나
Maven 의 특정 버전을 빌드하길 원할 때
사용될 수 있습니다.
다시말해, Maven wrapper
을 사용하면 빌드 시 버전
이나 개발 환경
에 더이상 의존하지 않아도 되며 독립적
이게 됩니다.
Maven wrapper 만 가지고 있으면 별도로 설치하지 않아도 되며, classpath 별다른 Maven version 을 지정할 필요도 없습니다 .
Maven Wrapper 구성하기
Maven wrapper 를 추가하는 가장 쉬운 방법은 Maven wrapper plugin 를 사용하는 것 입니다.
project directory 로 이동한 후 해당 위치에서 mvn -N io.takari:maven:wrapper
을 실행하면 .mvn
directory 와 mvnw
, mvnw.cmd
을 생성해줍니다.
mvnw
과 mvnw.cmd
은 Maven Wrapper 를 실행시키기 위한 script 파일입니다.
mvnw
: mvnw 는 Maven 대신에 사용되는 실행 가능한 unix shell script 입니다.mvwn.cmd
: mvnw 의 윈도우 배치 버전 shell script 입니다.
.mvn
directory 에는 wrapper
directory 가 생성되며 그 안에는
MavenWrapperDownloader.java
, maven-wrapper.jar
, maven-wrapper.properties
으로 총 3개의 파일이 존재합니다.
MavenWrapperDownloader.java
: java class file 인 이 파일을 compiling 및 실행하여 Maven 가 다운로드 되어집니다.maven-wrapper.jar
: wrapper shell scripts 로 부터 maven 을 실행하고, 다운로드 하는데 사용됩니다.maven-wrapper.properties
: Maven 이 존재하지 않는 경우 다운로드하기 위한 URL 을 명시하기 위해서 사용됩니다.
이 파일들을 통해서 Maven 이 존재하지 않아도 특정 버전과 classpath 를 가지고 공통된 Maven 을 다운로드 및 사용할 수 있게 됩니다.
Maven Wrapper 실행하기
추가된 Maven Wrapper 파일들로 해당 Maven 을 빌드 및 실행할 수 있습니다.
- Maven/target Clean 및 build
./mvnw clean package
- Maven 으로 Spring boot 를 백그라운드로 실행
-
./mvnw spring-boot:run &
-
- mvnw 로 설치된 maven 배포 경로
~/.m2/wrapper/dists
결론
Maven wrapper
는 어떤 개발환경
이나 사용자
에 구애받지 않고
실행 및 배포를 편하게 해줄 수 있는 유용한 파일/기능 입니다.
따라서 유연한 개발/배포를 진행하고자 한다면 꼭 추가해야할 사항입니다.
또한, Gradle
도 이러한 Wrapper
를 구성할 수 있습니다.
대부분 Gradle 을 설치하면 기본적으로 제공되기 때문에 어려움은 없겠지만, 만약 wrapper 가 구성되어있지 않다면 구성하여 더 유연하게 배포/실행하실 수 있습니다.
REFERNCE
- https://medium.com/xebia-engineering/a-quick-introduction-to-maven-wrapper-f1d9dbb4ea5e
- https://ixtears23.github.io/Maven-Wrapper/
- https://www.popit.kr/how-to-use-maven-wrapper/
- http://bennet-schulz.com/2018/04/12/quicktip-use-a-maven-wrapper/
'SPRING' 카테고리의 다른 글
[Spring] Meta Annotation 이란?(@Target, @Retention) (4) | 2020.07.25 |
---|---|
[Spring Boot] @NotNull, @NotEmpty, @NotBlank 의 차이점 및 사용법 (6) | 2020.04.01 |
[Spring boot] java 파일을 특정 패키지로 이동 시 발생하는 ConflictingBeanDefinitionException 문제 해결 (9) | 2020.01.03 |
[Mybatis] Spring boot 에서 mybatis 로 2개의 DB connection 하기 (2) | 2019.12.20 |
[Spring boot] TestRestTemplate 401(authentication) 오류 발생해결 (0) | 2019.10.05 |