빌드란?
-
소스코드 파일을 컴파일에서 실행할 있는 가공물로 변환하는 과정 또는 결과물 이다. 다시말하면 우리 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 자원등(. xml, , jpa,. jpg, properties) jvm이나 톰캣같은 WAS 인식할 있는 패키징하는 과정 결과물이라고 할수 있다.


빌드
도구란?
-
빌드 도구란 프로젝트 생성, 테스트 빌드, 배포등의 작업을 위한 프로그램이다.
빠른기간
동안 계속해서 늘어나는 라이브러리 추가, 프로젝트를 진행하며 라이브러리의 버전 동기화 어려움을 해소하고자 등장했다.
초기의 JAVA빌드 도구로는 ANT 많이사용했지만 최근에 maven gradle 많이 쓰인다. (ant 스크립트 작성도 많고, 라이브러리 의존관리가 되지않아 불편하다)

메이븐이란?
- Maven
자바용 프로젝트 관리도구로 Apache Ant 대안으로 만들어졌다.
maven
프로젝트의 전체적인 라이프 사이클을 관리하는 도구이며, 많음 편리함과 이점이 있다.
- 메이븐(Maven)은 빌드 자동화 도구이자, 소프트웨어 이해 도구이다. 주로 자바 프로그래핑에 사용되나 C#, Ruby, Scalar등 다른 언어에도 사용된다.
- maven
필요한 라이브러리를 특정문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들 까지 관리하여 네트워크를 통해서 자동으로 다운받아준다다운로드하여준다.
- maven
중앙 저장소(아파치 재단 운영관리) 통한 자동 의존성 관리를한다관리를 한다.
라이브러리를 공유하는 파일서버라고 있고, 메이븐은 자기 회사만의 중앙 저장소도 구축할 있다. 간단한 설정으로 배포관리가 가능하다.
 

1. Ant는 비교적 자유도가 높은 편

    (Ant : 전처리 / 컴파일 / 패키징 / 테스팅 / 배포 가능)

2. Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함.

    (Build Tool + Project Management)


메이븐
라이프사이클
1) LifeCycle
-
미리 정해진 빌드 순서
- 메이븐은 프레임워크이기 때문에 동작방식이 정해져있고, 미리 정의하고 있는 빌드 순서가 있다. 이를 라이프사이클(LifeCycle)이라 한다.

◎ Default(Build) : 일반적인 빌드 프로세스를 위한 모델이다.

◎ Clean : 빌드 시 생성되었던 파일들을 삭제하는 단계

◎ Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계

◎ Compile : 프로젝트의 소스코드를 컴파일하는 단계

◎ Test : 유닛(단위) 테스트를 수행하는 단계(테스트 실패 시 빌드 실패로 처리, 스킵 가능)

◎ Pacakge : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등등의 파일 등의 배포를 위한 패키지로 만드는 단계

◎ Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계

◎ Install : 패키지를 로컬 저장소에 설치하는 단계

◎ Site : 프로젝트 문서와 사이트 작성, 생성하는 단계

◎ Deploy : 만들어진 package를 원격 저장소에 release 하는 단계

 

최종 빌드순서는 compile -> test -> package이다.

① compile : src/main/java 디렉터리 아래의 모든 소스 코드가 컴파일된다.

② test : src/test/java, src/test/resources 테스트 자원 복사 및 테스트 소스 코드 컴파일된다. 

     ※ junit : 단위 테스트 프레임워크. 테스트 단계를 거치기 위해 의존 설정을 해준다.

③ packaging : 컴파일과 테스트가 완료된 후, jar, war 같은 형태로 압축하는 작업.


2) Phase(단계)
build LifeCycle
각각의 단계를 phase라고 한다.
phase
의존관계를 가지고 있어 해당 phases 수행되려면 이전 단계의 phase 모두 수행되어야 한다. , 모든 빌드단계는 이전단계가 성공적으로 실행되었을때 실행된다는 것이 Dependeny(의존성) 이다Dependeny(의존성)이다.

3) Goal
-
특정 작업, 최소한의 실행 단위(task).
-
하나의 플러그인에서는 여러 작업을 수행할 있도록 지원하며, 플러그인에서 실행할 있는 각각의 기능(명령) goal이라고 한다.
(
각각 phase 연계된 Goal 실행하는 과정을 build라고한다build라고 한다.)
-
플러그인의 goal 실행하는 방법은 다음과 같다.

 - mvn groupId:artifactId:version:goal(아래와 같이 생략 가능)

 - mvn plugin:goal


maven 설정 파일
1) settings.xml
-
메이븐 빌드 툴과 관련한 설정 파일
- MAVEN_HOME/conf디렉터리에디렉토리에 위치 (메이븐 설치시 기본제공기본 제공)
- settings.xml의의
설정
* 메이븐을 빌드할떄 의존관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 pc 다운로드하는 위치(로컬저장소)의 기본설정 'USER_HOME/. m2/repository'인데 settings.xml의 에 원하는 로컬 저장소의 경로를 지정, 변경할 수 있다.


2) POM(
프로젝트 객체모델(Project Obejct Model)
- POM
pom.xml파일을 말하며, 메이븐을 이용하는 프로젝트의 root 존재하는 xml파일이다.

  • Maven 기능을 이용하기 위해 pom 사용된다.
  • 파일은 프로젝트마다 1개이며, pom.xml 보면 프로젝트의 모든 설정, 의존성등을 있다.
  • 다른 파일이름으로 저장할 수도 있다. (mvn -f 파일명파일명. xml test).
     

▶ 엘리먼트

◎ modelVersion : POM model의 버전

◎ parent : 프로젝트의 계층 정보

◎ groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.

◎ artifactId : 프로젝트 빌듯이 파일 대표이름 이다. groupId 내에서 유일해야 한다. Maven을 이용하여 빌드시 다음과 같은 규칙으로 파일이 생성된다.

     artifactid-version.packaging. 위 예의 경우 빌드할 경우 bo-0.0.1-SNAPSHOT.war 파일이 생성된다.  (하단 예시 파일 참고)

◎ version : 프로젝트의 현재 버전, 프로젝트 개발 중일 때는 SNAPSHOT을 접미사로 사용.

◎ packaging : 패키징 유형(jar, war, ear 등)

◎ name : 프로젝트, 프로젝트 이름

◎ description : 프로젝트에 대한 간략한 설명

◎ url : 프로젝트에 대한 참고 Reference 사이트

◎ properties : 버전 관리 시 용이하다. ex) 하당 자바 버전을 선언하고 dependencies에서 다음과 같이 활용 가능하다.

      <version>${java.version}</version>

◎ dependencies : dependencies태그 안에는 프로젝트와 의존 관계에 있는 라이브러리들을 관리한다.

◎ build : 빌드에 사용할 플러그인 목록

ex) 최종적으로 위와 같은 설정을 통해 메이븐 빌드를 한 결과

 

복잡한 프로젝트, 멀티 프로젝트의 경우는 Gradle이 많이 사용된다고 한다

'JAVA' 카테고리의 다른 글

다형성이란?  (0) 2020.08.11
캡슐화란?  (0) 2020.08.11
GC(Garbage Collector)이란?  (0) 2020.08.07
JVM 이란?  (0) 2020.08.07
Jit 컴파일러란? 최적화 튜닝에 대해서  (0) 2020.08.07

+ Recent posts