반응형
Maven 이란?
- 편리한 빌드 절차를 제공하는 빌드 도구이자 프로젝트 관리 도구
- 지속적으로 추가되거나 버전 업데이트 되는 라이브러리를 관리해주는 의존성 관리 도구
- pom.xml (또는 setting.xml) 파일에 필요한 라이브러리를 dependency로 정의해두면 알아서 maven repository에서 다운 받아 설치해주고 경로까지 지정해준다. 지정한 라이브러리가 또다시 의존하는 라이브러리가 있다면 그것들까지 모두 추가해주는 ‘의존성 전이’ 까지 지원한다.
-
더보기빌드 : 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정
- java 소스코드, 프로젝트에 사용된 .jpg, .properties, .jar 같은 파일 및 자원들이 JVM이나 톰캣 같은 WAS(Web Application Server)가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물
- JVM 은 자바가 실행되기 위한 가상 컴퓨터이다. 자바는 OS에 종속적이지 않다는 특징이 있는데 그러려면 OS와 상관 없이 자바가 실행될 수 있는 어떤 실행기가 있어야 하고 그것이 바로 JVM(자바 가상 머신)이다. 이런 특징 때문에 어떤 사람은 JVM을 운영체제로 보기도 한다.
-
더보기빌드 도구 : 프로젝트를 생성, 컴파일, 테스트, 빌드, 배포 등 프로젝트의 라이프사이클 관리
라이프사이클(Lifecycle)
- Maven 은 프레임워크이기 때문에 동작 방식이 정해져 있고, 미리 정의하고 있는 빌드 순서
- Lifecycle은 크게 Default, Clean, Site 세가지로 표준 정의 하고 각 Lifecycle은 다시 Phase들로 구성되며 각 Phase는 실행 단위로서 goal 과 바인딩된다.
- clean : 이전 빌드 시 생성되었던 target 디렉토리의 모든 산출물(모든 파일)을 삭제
- default : 프로젝트 배포 절차, 패키지 타입별로 다르게 정의됨
- validate : 프로젝트 상태 점검, 빌드에 필요한 정보 존재 유무 체크
- initialize : 빌드 상태를 초기화, 속성 설정, 작업 디렉터리 생성
- compile : 프로젝트의 소스코드를 컴파일 → src/main/java 디렉터리 아래의 모든 소스 코드가 컴파일
- test-compile : 테스트 코드를 컴파일
- test : 단위 테스트 프레임워크를 이용해 테스트 수행
- → src/test/java, src/test/resources 테스트 자원 복사 및 테스트 소스 코드 컴파일
- → JUnit 같은 테스트 프레임워크로 코드를 테스트
- package : 개발자가 선택한 war, jar 등의 패키징 수행ear/war/jar : 소프트웨어, 웹 어플리케이션에 사용되는 파일들을 가볍고 편리하게 관리하기 위해 압축하는 패키지 포맷 ( ear > war > jar > class)
-
더보기EAR(Enterprise Archive) : 웹 어플리케이션 단위를 넘어 실제 배포하기 위한 단위. jar 과 war을 묶어서 각각의 기능을 지원
-
더보기WAR(Web Archive) : 웹 어플리케이션을 지원하기 위한 압축 방식. jsp, servelt, gif, html, jar 등을 압축
-
더보기JAR(Java Archive) : 여러 개의 자바 클래스 파일과 클래스들이 이용하는 관련 리소스 등의 메타데이터를 하나의 파일로 모아 응용 소프트웨어나 라이브러리로 배포하기 위한 패키지 포맷. JDk에 포함된 jar 명령어 사용해 압축/해제 → 컴파일과 테스트가 완료된 후, jar, war 같은 형태로 압축
-
- integration-test : 통합 테스트
- verify : 패키지가 품질 기준에 적합한지 검사
- install : 패키지를 로컬 저장소에 설치
- deploy : 패키지를 원격 저장소에 배포 (pom에 추가적인 설정 필요)
- site : 프로젝트 문서화 절차
POM(Project Object Model)
- maven을 이용하는 프로젝트의 root에 존재하는 xml 파일
- 프로젝트의 모든 설정 및 의존성을 알 수 있음
- pom.xml에는 아래와 같은 여러가지 요소가 포함된다.
프로젝트 기본 정보
<modelVersion>4.0.0</modelVersion> | pom.xml 파일 양식의 버전 정보이며, 5.0.0은 아직 나오지 않았다. |
<groupId>com.회사이름</groupId> | 다른 프로젝트들과 구별되는 유니크한 패키지 이름. 보통 회사 이름을 사용하고, 멀티 프로젝트가 된다면 새로운 식별자만 부모의 GroupId 뒤에 추가된다. ex) com.naver, com.naver.map, org.apache |
<artifactId>모듈이름</artifactId> | 프로젝트에서 생성되는 jar, war 파일 등의 이름을 의미한다. 자바 빌드시 산출물로 .jar 파일이 만들어지고 이를 artifact 라고 부른다. |
<version>artifact의 버전</version> | 새로운 프로젝트의 버전. 프로젝트에서 생성되는 artifact의 버전을 의미하며, default로 명명된 0.0.1-SNAPSHOT은 아직 개발 중이라는 뜻이다. |
<packaging>artfact의 포맷</packaging> | 프로젝트에서 생성되는 artifact의 파일 포맷을 의미한다. ex) jar, war |
4.0.0
com.daou.go
lang-maven-plugin
maven-plugin
0.7_1
lang-maven-plugin Maven Mojo
<http://maven.apache.org>
프로퍼티
<properties>...</properties> | . |
의존성
<dependencies>...</dependencies> | 안에 dependency가 각각 리스트로 들어간다. 명시된 라이브러리를 자동으로 검색해 다운받는다. |
<dependencies>
<dependency> //dependency 1
<groupId>org.apache.maven</groupId> // 라이브러리의 프로젝트명(실제 사이트에서 해당 이름으로 검색)
<artifactId>maven-plugin-api</artifactId> // 내가 생성한 프로젝트에서 사용한 모듈명
<version>2.0</version>
</dependency>
<dependency> //dependency 2
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
빌드
<build>...</build> | 프로젝트 빌드시 사용될 여러가지 정보들 |
<build>
<defaultGoal>install</defaultGoal>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
플러그인(Plugin)
- 특정 작업(어플리케이션 개발) 등을 하기 위해서 모아 놓은 Task들의 묶음
- 컴파일, 빌드, 테스트 등의 작업들이 Task 단위로 이루어 지는데 이런 Task들을 일일히 maven 파일에 정의 해놓으면 매우 비효율적이므로 plugin 형태로 미리 묶어 만듬
- maven 은 빌드도구로서 위와 같은 Task들을 지원한다고 했었는데 이런 maven에서 각 Task에 대한 기본 plugin 프로젝트가 정의되어 (?) 있다.
- 라이브러리 와 플러그인 차이
- 플러그인은 어떤 특정한 하나의 문제를 해결하기 위한 component
- 라이브러리는 비슷한 성격을 가진 플러그인의 집합 (라이브러리 > 플러그인)
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
하지만 maven에서 이 플러그인을 만들었다는 것은 아니고 maven에서는 해당 프로젝트를 검색해서 연결해주는 역할을 한다.
Maven Project 구조
- src 와 test가 분리된 구조
반응형
'Build Tool' 카테고리의 다른 글
[Maven] maven 플러그인 만드는 방법 (0) | 2022.08.23 |
---|