Maven
= Maven은 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴(build tool)입니다.
자바 소스를 compile하고 package해서 deploy하는 일을 자동화 해주는 것입니다
Maven에서 두 개의 설정파일을 잘 살펴봐야합니다.
1) settings.xml
settings.xml은 Maven tool 자체에 관련된 설정을 담당합니다.
MAVEN_HOME/conf/ 아래에 있습니다. (*MAVEN_HOME은 환경변수에 설정한 경로)
Maven자체에 설정 값을 바꾸는 일은 일단 잘 없으니 넘어가고 pom.xml을 살펴봅니다.
2) pom.xml
하나의 자바 프로젝트에 빌드 툴로 maven을 설정했다면, 프로젝트 최상위 디렉토리에 "pom.xml" 이라는
파일이 생성되었을 것입니다.
pom.xml은 POM(project Object Model) 을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정하는 부분입니다.
꼭 pom.xml이라는 이름을 가진 파일이 아니라 다른 파일로 지정할 수도 있다고 합니다.
보통은 maven의 원칙(편의성)으로 같이 일하는 개발자들이 햇갈리지 않게 pom.xml을 사용합니다.
ex)
<?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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.6.11</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.javateam</groupId>
	<artifactId>demoJPA</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>demoJPA</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>1) 프로젝트 정보
맨 위의 태그부터 보면
<modelVersion> : 4.0.0 이라고 써있는데 이것은 maven의 pom.xml의 모델 버전입니다. 형식이 4.0.0버전이라고 이해하면 됩니다.
<groupId> : 프로젝트를 생성한 조직 or 그룹명으로 보통. URL 의 역순으로 지정합니다.
<artifactId) : 프로젝트에 생성되는 기본 아티팩트의 고유 이름입니다.
= 메이븐에 의해 생성되는 일반적인 artifact는 <artifact>-<version>.<extention>입니다.
<version> : 어플리케이션의 버전 접미사로 SNAPSHOT이 붙으면 아직 개발단계라는 의미입니다.
<name> : 프로젝트 설명
<url> : 프로젝트를 찾을 수 있는 URL
의 내용들을 가지고 있습니다.
<properties> : pom.xml에서 중복해서 사용되는 설정(상수) 값들을 지정해놓는 부분. 다른 위치에서 $(...)로 표기해서 사용할 수 있습니다. (java.version에 1.8을 적용하고 다른 위치에서 $(java.version)이라고 쓰면 "1.8"이라고 쓴 것과 같습니다.)
<profiles> : dev.prod 이런식으로 개발할 때, 릴리즈할 때는 나눠야할 필요가 있는 설정 값은 profiles로 설정할 수 있습니다.
2. 의존성 라이브러리 정보
의존성 라이브러리 정보를 적을 수 있습니다.
정보에는 최소한 groupId. artifactId, version 정보가 필요합니다.
ex) 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>스프링부트의 spring-boot-starter-*같은 경우에는 부모 pom.xml에서 이미 버전정보가 있어서 위의 코드처럼
version은 따로 지정할 필요가 없습니다.
스프링부트는 해당 스프링버전에 잘 맞는 버전으로 이미 설정이 되어 있기 때문에 오버라이드해서 문제가 생기는 부분은 순전히 개발자의 탓입니다.
3.bulid 정보
build tool : maven의 핵심인 빌드와 관련된 정보를 설정할 수 있는 곳입니다.
<build> 부분에서 설정할 수 있는 값들에 대해 설명하기 전에 "라이프 사이클(life-cycle")

메이븐의 모든 기능은 plugin을 기반으로 동작합니다.
플러그인에서 실행할 수 있는 각각의 작업을 골(goal)이라하고 하나의 페이즈는 하나의 골과 연결되며, 하나의 플러그인에는 여러 개의 골이 있을 수 있습니다.
'개인공부' 카테고리의 다른 글
| Mybatis (0) | 2022.09.05 | 
|---|---|
| Spring Bean (0) | 2022.09.05 | 
| jdbc docker 연동오류.docker ip확인하기 (0) | 2022.08.08 | 
| Docker Tomcat mysql 환경 구성 (0) | 2022.08.08 | 
| STS 예제 진행 (0) | 2022.08.04 | 
 
                    
                  