2020-9-30 메이븐 기초 공부하기

배경

  • 자바, 스프링 개발할때, 항상 gradle, maven 둘중 하나의 빌드도구를 선택해야된다. 평소 강의를 많이 듣기 때문에 영상에서 늘 메이븐 기반으로 강의가 진행되고 pom.xml을 작성하게 된다. 근대 자바공부한지 2년이 됬는데도 모르겠다. 바이트코드 조작과 관련된 강의를 보다가도 메이븐 플러그, menifest를 이야기하는데 동작은 하는데 원리를 알고 싶어서 메이븐에 대해 간략히 공부해봤다.

빌드도구란

  • 프로젝트 생성, 테스트 빌드, 배포 등 기본적인 작업을 위한 프로젝트 관리 도구를 지칭한다.
  • 명령어를 통해 프로젝트 생성 및 빌드작업을 실시한다.
  • Apache Maven은 중앙저장소를 만들었다. 이 중앙저장소를 통해 개발자들이 직접 라이브러리를 설치하지 않고, Maven 중앙저장소에서 다운로드받고 설치한다.

라이프사이클

  • 메이븐은 미리 정해진 빌드 순서를 가진다. 이를 라이프사이클이라 부르고, 라이프 사이클의 각 빌드단계를 페이즈(phase)라고 한다.
  • 기본라이프 사이클
    • compile : 소스코드를 컴파일
    • test : 단위테스트를 실행(테스트가 실패하면 빌드 실패)
    • package : 컴파일된 클래스 파일과 리소스 파일들을 jar, war 같은 파일로 패키징한다.
    • install : 패키징한 파일을 로컬에 배포.
    • deploy : 패키징한 파일을 원격에 배포.(maven central)
  • 클린 라이프 사이클
    • clean : 빌드를 통해 생성된 모든 파일을 삭제
  • site 라이프 사이클
    • site : 메이븐 설정정보를 활용하여 프로젝트에 대한 문서 사이트를 생성
    • site-deploy : 생성한 문서 사이트를 설정된 서버에 배포.

실행

public class HelloMaven {
  public static void main(String[] args) {
    System.out.println("Hello maven");
  }
}

// shell
mvn package
java -cp target/...jar me.jimmy.HelloMaven
  • 위와같이 패키징을 하고, HelloMaven을 검색하면 Hello Maven명령어가 출력된다.
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!

  • mvn package를 하면 위와같은 경고 메세지들이 출력된다.

    • <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <prject.reporting.outputEncoding>UTF-8</prject.reporting.outputEncoding>
        <maven.compiler.source>1.11</maven.compiler.source>
        <maven.compiler.target>1.11</maven.compiler.target>
      </properties>
      
    • maven에 properties를 설정하면 위의 경고 메세지들이 사라진다.

페이즈

  • maven에는 default, clean, site라는 라이프사이플이 존재한다.
  • default는 프로젝트 빌드 및 배포를 담당한다.

default 페이즈

  • validate
  • compile
  • test
  • package
  • verify
  • install
  • deploy

이전에 실행했던 mvn package 명령어를 실행하면 validate->compile->test->package순서로 실행된다.

  • 여러페이즈 실행 : mvn clean deploy와 같은 명령어는 clean명령어를 실행하고 deploy를 실행

느낀점

  • 전부터 빌드도구에 대한 궁금증은 있어서, maven 홈페이지도 들어가보고 빌드도구 관련된 책들도 찾아봤었다. 예전에는 빌드도구 관련 책들이 있었는데, 워낙 인기가 없어서 그런지 절판되고 지금은 없다. 그렇다고 공식홈페이지를 들어가도 메이븐을 사용하는 목적이 명확해야된는데, 들어가서 봐도 잘 몰랐다. 그래서 오늘 강의에서 나온 메이븐의 의미를 찾으려고 검색하다가 우연히 좋은자료를 보게되었다. 앞으로 꾸준히 공부해야겠다.

Reference

  • http://www.devkuma.com/books/pages/102
Written on September 30, 2020