본문 바로가기

DevOps/Project management

메이븐(Maven) 자바 프로젝트 관리 툴


Maven  :   https://maven.apache.org/

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. If you think that Maven could help your project, you can find out more information about in the "About Maven" section of the navigation. 


메이븐은 영어로 전문가라는 뜻이자, 이디시어(출처 : 이디시아어 위키피디아)로 지식의 누적(accumulator of knowledge) 라는 뜻을 가지고 있다. 원래는 빌드 프로세스를 간단하게 하려는 시도인 Jakarta Turbine project에서 시작되었다. 일명 자카르타 프로젝트는 자바 플랫폼을 위한 오픈소스 소프트웨어를 만들고 정비하기 위해 만들어졌다. 프로젝트안에는 하위 프로젝트로 많은 tool, library, framework들의 성과물이 나왔으며 그 중 최상위로 승격된 프로젝트는 아래와 같다.(출처 : 자카르타 프로젝트 위키피디아)

  • 앤트 - 빌드 도구 
  • 메이븐 - 프로젝트의 빌드와 관리 도구 
  • 스트럿츠 - 웹 애플리케이션 개발 프레임워크 
  • 톰캣 - JSP/서블릿 컨테이너 
  • 태피스트리 - 자바로 다양하고 다이나믹하고 범용성있는 웹 애플리케이션을 만들기 위한 프레임워크. 자바빈즈 프로퍼티 기반의 컴포넌트 오브젝트 모델이다. 
  • Hivemind - 서비스이자 환경설정 마이크로커널. 
  • 커먼즈 - 자바 표준 라이브러리를 보완하기 위한 유용한 클래스 모음 
  • HttpComponents- 하이퍼텍스트 전송 프로토콜 
  • POI - 마이크로소프트의 대중적인 파일 포맷을 접근하게 해주는 API 
  • 터빈 - 빠른 개발을 목표로 하는 웹 애플리케이션 프레임워크 
  • 벨로시티 - 웹 템플릿 엔진 
  • JMeter - 서버에의 부하와 스트레스를 테스트

위 여러 자카르타 하위 프로젝트 중 메이븐에 대해 알아보고자 한다.


메이븐의 목적

  • 빌드프로세스를 간단히
  • 정형화된 빌드 시스템 제공
  • 프로젝트 퀄리티 정보 제공
  • 예제 프로젝트의 잘짜여진 가이드라인 제공
  • 새로운 feature로 migration시 명확하게 제공
메이븐 Plugins
메이븐은 plugin 실행 프레임워크이다. 모든 실행은 플러그인으로 이루어진다.
Build plugins : 프로젝트가 build 될때 실행되는 플러그인, POM안의 <build/> 엘리먼트 안에 반드시 설정되어야 함
Reporting plugins : 프로젝트가 site generation 될 때(api 설명 홈페이지를 자동완성, 혹은 javadoc같은 것들) 실행되는 플러그인, POM안의 <reporting/> 엘리먼트 안에 반드시 설정되어야 한다.

 Plugin

 Type

Description 

 Core plugins

 

 

 clean

build 후 clean작업 

 compiler

Compiles Java sources 

 deploy

remote repository로 빌드된 artifact를 deploy 

 install

local repository에 빌드된 artifact를 install 

 resources

JAR을 include하기 위해 output directory에 resource들을 카피 

 site

현재 프로젝트를 위한 사이트(무슨사이트??)를 생성  

 Packaging

types/tools

  
 ear

B

현재 프로젝트에 대해 EAR 생성 

 jar

현재 프로젝트에 대해 jar생성 

 rar

B

현재 프로젝트에 대해 rar생성 

 war

현재 프로젝트에 대해 war생성 

 source

현재 프로젝트에 대해 source-JAR생성 

 Reporting

plugins

 

 

 changelog

SCM(??)으로부터 최근 변경사항 리스트 생성 
 changesB+R 

이슈트래커 or change document로 부터 리포트 생성 

 javadoc

B+R 

프로젝트를 위한 Javadoc 생성 

 Tools

  

 ant

프로젝트를 위해 Ant 빌드 파일을 생성 

 antrun

build순서에 따라 ant 빌드set을 실행 

 archetype

archetype에 따라 skeleton project structure 생성 

 pdf

프로젝트문서를 위한 PDF생성 

 release현재 프로젝트를 release함 

 scm

현재 ㅍ로젝트에 SCM 명령어를 실행 

B : Build plugin / R : Reporting plugin


이외에도 google에서 지원하는 3rd plugin(jetty 등)도 있다.

5분만에 Maven익히기
  1. maven을 각자 환경에 맞게 설치
    1. 윈도우에 maven 설치하기
    2. linux에 maven 설치하기
    3. mac에 maven 설치하기
  2. 아래와 같이 command line을 치기
    1
    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    cs
  3. my-app directory에 들어가면 아래와 같이 standard project structure가 만들어 진것을 볼 수 있음
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    my-app
    |-- pom.xml
    `-- src
        |-- main
        |   `-- java
        |       `-- com
        |           `-- mycompany
        |               `-- app
        |                   `-- App.java
        `-- test
            `-- java
                `-- com
                    `-- mycompany
                        `-- app
                            `-- AppTest.java
    cs
  4. pom.xml파일이 아래와 같이 생성된 것도 볼 수 있다.
    pom.xml파일은 Maven의 프로젝트 관리의 심장부라고 볼 수 있다. POM은 매우 크고 복잡해서 위압당할 수도 있다. 그러나 개발자가 모든 각각의 내용에 대해 알려고할 필요는 없다.(The POM is huge and can be daunting in its complexity, but it is not necessary to understand all of the intricacies just yet to use it effectively.) 하지만 프로젝트를 관리하는 사람은 제대로 다 알아야겠지.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <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>com.mycompany.app</groupId>
      <artifactId>my-app</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
     
      <name>Maven Quick Start Archetype</name>
      <url>http://maven.apache.org</url>
     
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.8.2</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </project>
    cs
  5. 프로젝트 빌드 하려면 아래와 같이 명령어를 친다.(pom.xml이 있는 디렉토리에 반드시 들어가야한다!)

    1
    mvn package
    cs
    그러면 아래와 같이 terminal에 찍힌다.
    1
    2
    3
    4
    5
    6
    7
    8
     ...
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 2 seconds
    [INFO] Finished at: Thu Jul 07 21:34:52 CEST 2011
    [INFO] Final Memory: 3M/6M
    [INFO] ------------------------------------------------------------------------
    cs
  6. jar파일이 완성되었다. 이제 아래와 같이 실행시켜보자
    1
    java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
    cs
    결과물은 아래와 같다.
    1
    Hello World!
    cs
  7. 위에는 Build plugin을 사용해봣고, site라고 불리는 Reporting plugin을 실행시켜보자.

    target/site 폴더가 만들어 진 것을 볼 수 있다.
    index.html을 실행하면?? 해당 프로젝트에 관한 모든 내용을 website로 일목요연하게 볼 수 있다. WOW




End of Document