빌드란?
- 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다.
- 즉, 작성한 소스코드(. java), 프로젝트에서 쓰인 각각의 파일 및 자원(.xml, .jpg, .jar, .properties 등)을 JVM이나 tomcat 같은 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물
+ 빌드 도구(Build Tool)
- 빌드 도구란 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램
- 빠른 기간 동안 계속해서 늘어나는 라이브러리 추가, 프로젝트를 진행하며 라이브러리의 버전 동기화의 어려움을 해소하고자 등장
- 초기의 java 빌드 도구로 Ant를 많이 사용하였으나 최근 많은 빌드 도구들이 생겨나 Maven이 많이 쓰였고, 최근에는 Gradle이 많이 쓰인다.
Maven
Maven이란?
- Maven은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다.
- Maven은 Ant와 마찬가지로 프로젝트의 전체적인 라이프 사이클을 관리하는 도구이며, 많은 편리함과 이점이 있어 널리 사용되고 있다.
- Maven은 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는 데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운로드하여 준다.
- Maven은 중앙 저장소를 통한 자동 의존성 관리를 Apache 재단에서 운영하는 중앙 저장소 또는 개별의 중앙 저장소에서 할 수 있으며 이는 라이브러리를 공유하는 파일 서버라고 볼 수 있다.
- 간단한 설정을 통한 배포 관리가 가능하다.
+ Ant vs Maven
- Ant : 비교적 자유도가 높다.(전처리/컴파일/패키징/테스팅/배포 가능)
- Maven : 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능 포함(Build Tool + Project Management)
Maven의 LifeCycle
1. Life Cycle이란
- 미리 정해진 빌드 순서
- Maven은 프레임워크이기 때문에 동작 방식이 정해져있고, 미리 정의하고 있는 빌드 순서가 있다. 이른 Life Cycle이라 한다.
Default(Build) | 일반적인 빌드 프로세스를 위한 모델 |
Clean | 빌드 시 생성되었던 파일들을 삭제 |
Validate | 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인 |
Compile | 프로젝트의 소스코드를 컴파일 |
Test | 유닛 테스트를 수행(테스트 실패시 빌드 실패로 처리 + 생략 가능) |
Package | 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 파일로 패키징 |
Verify | 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는 지 확인 |
Install | 패키지를 로컬 저장소에 설치 |
Site | 프로젝트 문서와 사이트 작성 및 생성 |
Deploy | 만들어진 Package를 원격 저장소에 release |
2. 빌드 순서
- compile -> test -> package
- compile : src/main/java 디렉토리 아래의 모든 소스 코드 컴파일
- test : src/test/java, src/test/resources 테스트 자원 복사 및 테스트 소스 코드 컴파일
※ junit : 단위 테스트 프레임워크. 테스트 단계를 거치기 위해 의존 설정을 해준다.
- package : compile과 test가 완료된 후 jar, war 같은 형태로 압축
3. Phase(단계)
- Build LifeCycle의 논리적 빌드 단계
- Phase는 의존 관계를 가져 해당 Phase가 수행되기 위해서는 이전의 Phase가 선행해야 한다.
- 각 Phase에는 연결된 plug-in이 존재
- Dependency : 모든 Phase는 이전 단계가 성공적으로 실행되었을 때 실행된다.
4. Goal
- 특정 작업, 최소한의 실행 단위(task)
- 하나의 plug-in에서는 여러 작업을 수행할 수 있도록 지원하며, plug-in에서 실행할 수 있는 각각의 기능을 Goal이라 한다.
- 플러그인의 goal을 실행하는 방법
-> mvn groupId:artifactId:version:goal
-> mvn plugin:goal
5. Maven 설정 파일
1. settings.xml
- Maven Build Tool과 관련한 설정 파일
- MAVEN_HOME/conf 디렉터리에 위치(maven 설치 시 기본 제공)
+ maven을 빌드할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드하는 위치(로컬 저장소)의 기본
설정 'USER_HOME/.m2/repository'를 settings.xml을 통해 원하는 로컬 저장소의 경로로 지정, 변경할 수 있다.
2. POM(Project Object Model - 프로젝트 객체 모델)
- POM은 pom.xml 파일을 의미하며, maven을 이용하는 프로젝트의 root에 존재하는 xml 파일이다.
- Maven의 기능을 이용하기 위해 POM이 사용된다.
- 파일은 프로젝트마다 1개이며, pom.xml을 통해 프로젝트의 모든 설정, 의존성 등을 알 수 있다.
- pom.xml의 이름을 수정할 수 있으나 그대로 사용하는 것이 권장된다.
+ pom.xml 예제 (SpringBoot 프로젝트 생성 시 기본적으로 제공되는 pom.xml 파일)
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <!--POM model의 버전-->
<parent> <!--프로젝트의 계층 정보-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.god</groupId> <!--프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.-->
<artifactId>bo</artifactId> <!--프로젝트 빌드시 파일 대표이름 이다. groupId 내에서 유일해야 한다.Maven을 이용하여 빌드시 다음과 같은 규칙으로 파일이 생성 된다.
artifactid-version.packaging. 위 예의 경우 빌드할 경우 bo-0.0.1-SNAPSHOT.war 파일이 생성된다.-->
<version>0.0.1-SNAPSHOT</version> <!--프로젝트의 현재 버전, 프로젝트 개발 중일 때는 SNAPSHOT을 접미사로 사용-->
<packaging>war</packaging> <!--패키징 유형(jar, war, ear 등)-->
<name>bo</name> <!--프로젝트, 프로젝트 이름-->
<description>Demo project for Spring Boot</description> <!--프로젝트에 대한 간략한 설명-->
<url>http://goddaehee.tistory.com</url> <!--프로젝트에 대한 참고 Reference 사이트-->
<properties>
<!-- 버전관리시 용이 하다. ex) 해당 자바 버전을 선언 하고 dependencies에서 다음과 같이 활용 가능 하다.
<version>${java.version}</version> -->
<java.version>1.8</java.version>
</properties>
<dependencies> <!--dependencies 태그 안에는 프로젝트와 의존 관계에 있는 라이브러리들을 관리 한다.-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build> <!--빌드에 사용할 플러그인 목록-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
출처 {
https://goddaehee.tistory.com/199
https://velog.io/@changyeonyoo/Maven-%EC%9D%B4%EB%9E%80
[Maven] Maven 이란? (정의, 예제)
[Maven] 메이븐 이란? (정의, 예제) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 메이븐 알아보기 ] 입니다. : ) 1. 빌드 (Build) #1 빌드란? - 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립
goddaehee.tistory.com
}
'Programming > Java' 카테고리의 다른 글
Spring 개념과 express.js와의 차이 (0) | 2023.01.24 |
---|---|
[JAVA] Gradle (0) | 2022.07.19 |
[JAVA] 람다식 (0) | 2022.04.18 |
[JAVA] 제네릭 (0) | 2022.04.11 |
[JAVA] I/O (0) | 2022.04.05 |
댓글