JAVA [JAVA] Maven 이란? 미로그 2024. 5. 19. 11:00 Maven이란? 라이프 사이클 종류 플러그 인 의존성(dependency) pom.xml Maven디렉터리 구조 Maven 이란? : 자바용 프로젝트 관리 도구. + Maven은 앞서 빌드에 대해서 알아볼 때 나왔던 빌드 툴 중 하나이다. 오늘은 자주 사용하고 있는 Maven에 대해 조금 더 자세히 알아봅시다. Maven - Maven은 Apache사에서 만든 빌드 툴(build tool)이다. - pom.xml파일을 통해 정형화된 빌드 시스템으로 프로젝트 관리를 해준다. - 프로젝트의 전체적인 라이프 사이클을 관리한다. Maven Life Cycle 및 종류 Life Cycle ? Maven은 프레임워크 이기 때문에 동작 방식이 정해져 있고, 미리 정의하고 있는 빌드 순서가 있다. 이를 라이프 사이클(LifeCycle) 이라고 한다. Life Cycle의 종류 ? ◎ Default(Build) : 일반적인 빌드 프로세스를 위한 모델이다. ◎ Clean : 빌드 시 생성되었던 파일들을 삭제하는 단계 ◎ Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계 ◎ Compile : 프로젝트의 소스코드를 컴파일 하는 단계 ◎ Test : 유닛(단위) 테스트를 수행 하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능) ◎ Pacakge : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등등의 파일 등의 배포를 위한 패키지로 만드는 단계 ◎ Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계 ◎ Install : 패키지를 로컬 저장소에 설치하는 단계 ◎ Site : 프로젝트 문서와 사이트 작성, 생성하는 단계 ◎ Deploy : 만들어진 package를 원격 저장소에 release 하는 단계 phase(단계) 각 라이프 사이클 안에는 더 작은 단위의 빌드단계가 정의되어 있는데 이를 phase라고 한다. Phase는 의존관계를 가지고 있어 해당 Phase가 수행되려면 이전 단계의 Phase가 모두 수행되어야 한다. 플러그 인 - Maven은 플러그인을 구동해주는 프레임 워크이다. 모든 작업은 플러그인에서 수행한다. - Maven은 여러 플러그 인 으로 구성되어 있으며, 각각의 플러그 인인 하나 이상의 Goal(명령,작업)을 포함하고 있다. - Goal은 Maven의 실행단위이고, 플러그 인과 Goal의 조합으로 실행한다. - Maven은 여러 Goal을 묶어서 LifeCycle Phases(단계)로 만들고 실행한다. 의존성 (Dependency) - 개발자가 프로젝트에 사용할 라이브러리를 pom.xml에 dependency로 정의만 해두면 Maven이 repository에 검색해서 자동으로 추가해주며, 참조하는 lib까지 추가해준다. 이것을 '의존성 전이'라고 한다. pom.xml <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> Pom.xml (Project Object Model) Maven을 이용하는 프로젝트의 Root에 존재하는 XML파일. 프로젝트 당 1개가 있으며, 프로젝트의 모든 설정, 의존성등을 알 수 있다. Maven 디렉터리 구조 메이븐은 bast practices을 기반으로 정규화된 디렉터리 구조를 제공하고 있으며, 모든 소스파일들은 /src 디렉터리 이하에, 빌드된 output은 /target 디렉터리 밑에 위치한다. - /pom.xml : 프로젝트 객체모델. 해당 프로젝트에 대한 전반적인 정보를 갖는다. - /src/main/java : Java 소스 파일 위치 - /src/main/resource : 배포할 리소스, XML, properties, ... - /src/main/webapp : 웹 어플리케이션 관련 파일 위치(WEB-INF, css등) - /src/test/java : 테스트 케이스 java소스 - /src/test/resource : 테스트 케이스 리소스 - /target : 빌드된 output이 위치하는 디렉터리 Reference https://velog.io/@changyeonyoo/Maven-%EC%9D%B4%EB%9E%80 https://goddaehee.tistory.com/199 https://sjh836.tistory.com/131 https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev:dep:maven:maven_%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC_%EA%B5%AC%EC%A1%B0 공유하기 게시글 관리 MI_Log 'JAVA' 카테고리의 다른 글 [JAVA] Spring 어노테이션 @SuppressWarnings 이란? (0) 2024.07.30 [JAVA] Map을 구현하는 클래스 종류 (0) 2024.05.19 [JAVA] MAP과 HASH MAP의 차이? (0) 2024.05.19 [JAVA] Public Class 꼭 사용하는 이유? (feat. Public Class VS Class) (0) 2024.03.27 [JAVA] 빌드란?(+ Ant, Maven, Gradle) (0) 2024.01.09 'JAVA' Related Articles [JAVA] Map을 구현하는 클래스 종류 [JAVA] MAP과 HASH MAP의 차이? [JAVA] Public Class 꼭 사용하는 이유? (feat. Public Class VS Class) [JAVA] 빌드란?(+ Ant, Maven, Gradle)