본문 바로가기
IT/Spring

메이븐 (Maven)

by sgoho01 2019. 4. 30.

메이븐 (Maven)

1. Maven ?

  • 메이븐은 자바 프로젝트의 빌드(build)를 자동화 해주는 빌드 툴이다.
  • 자바 소스를 compile하고 package해서 deploy하는 일을 자동화

2. Maven 참조 설정파일

2-1. settings.xml

  • settings.xml은 mavent tool 자체에 관련된 설정
  • 위치는 MAVEN_HOME/conf/settings.xml
  • 전체적인 구조 ↓
          <settings> // 최상위 엘리먼트
              <pluginGroups>
                  ...
                  <!-- 플러그인의 groupId가 명시적으로 설정되어 있지 않을 때 플러그인을 지정하는 곳 -->
              </pluginGroups>
              <mirrors>
                  ...
                  <!-- 저장소에 대한 다운로드 미러(?) -->
              </mirrors>
              <profiles>
                  ...
                  <!-- JDK 버전별, OS 별 빌드 구성 다르게 할수 있는 설정 -->
              </profiles>
              <activeProfiles>
                  ...
                  <!-- .. -->
              </activeProfiles>
              <servers>
                  ...
                  <!-- .. -->
              </servers>
          </settings>
  • repository 저장위치 설정
        <localRepository>${user.home}/.m2/repository</localRepository>    

2-2. pom.xml

  • 자바 프로젝트의 빌드 툴을 maven으로 설정해서 만들었다면 생성되는 파일.
  • POM(Project Object Model)을 설정하는 부분, 프로젝트 내 빌드 옵션을 설정하는 부분

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>  <!-- What? maven pom.xml의 모델 버전. (MAVEN의 형식이 4.0.0 이다.) -->
    <parent>  <!-- What? 스프링 부트에서 자주 사용하는 라이브러리의 버전정보, dependency들을 상속받는당 (부트의 pom.xml)  -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ghsong</groupId>  <!-- What? 프로젝트를 생성한 조직, 그룹명 (보통 URL의 역순으로 작성) -->
    <artifactId>spring-mvc</artifactId>  <!-- What? 프로젝트에서 생성되는 기본 아티펙트의 고유 이름 (프로젝트를 나타내는 유일한 이름) -->
    <version>0.0.1-SNAPSHOT</version>  <!-- What? 애플리케이션의 버전 (접미사로 SNAPSHOT이 붙으면 개발단계라는 의미) -->
    <name>spring-mvc</name>  <!-- What? 프로젝트 명 -->
    <description>Spring Boot Study</description>  <!-- What? 프로젝트 설명 -->

        <url>..</url>  <!-- What? 해당 프로젝트를 찾을 수 있는 URL -->

    <properties>  <!-- What? pom.xml에서 중복으로 사용되는 설정값들을 지정해놓는 부분 (다른 위치에서 사용 시 ${..}로 사용)-->
        <java.version>11</java.version>
    </properties>

    <dependencies>  <!-- What? 의존성 라이브러리 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>  <!-- What? complie, runtime, provided, test...  해당 라이브러리가 언제 필요한지 -->
        </dependency>
    </dependencies>

    <build>  <!-- What? MAVEN의 핵심인 빌드와 관련된 정보 설정 -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3. MAVEN 라이프사이클

  • maven의 라이프사이클은 크게 default, clean, site .
  • 메이븐의 모든 기능은 플러그인을 기반으로 동작
  • 플러그인에서 실행할 수 있는 각각의 작업을 골(goal)이라하고 하나의 페이즈는 하나의 골과 연결되며, 하나의 플러그인에는 여러개의 골이 있을 수 있다.

?scode=mtistory&fname=http%3A%2F%2Fcfile21.uf.tistory.com%2Fimage%2F999B12465BBC992C202A89

라이프 사이클

  • mvn process-resources : resource 디렉토리의 있는 파일을 target/classes로 복사
  • mvn compile : src/java 밑의 모든 자바 소스를 컴파일해서 target/classes로 복사
  • mvn test-compile : test/java의 내용을 target/test-classes로 복사
  • mvn test : surefire:test의 실행. target/test-classes에 있는 테스트케이스의 단위테스트 진행 (결과를 target/surefire-reports에 저장)
  • mvn package : target 디텍토리 하위에 jar, war, ear등 패키지파일을 생성하고 이름은 <build><finalNmae>의 값을 사용 (없을 경우 artifactId-version.extention 으로 생성)
  • mvn install : 로컬 저장소로 배포
  • mvn deploy : 원격 저장소로 배포
  • mvn clean : 빌드 과정에서 생긴 target 디렉토리 내용 삭제
  • mvn site : target/site에 문서 사이트 생성
  • mvn site-deploy : 문서 사이트를 서버로 배포

Build

  • <finalName> : 빌드 결과물(war, jar, ear)의 이름 설정
  • <resource> : 리소스(각종 설정 파일)의 위치 설정
    • <resource> 없으면 기본으로 "src/main/resources"
  • <testResources> : 테스트 리소스의 위치
    • <testResource> : 없으면 기본으로 "src/test/resources"
  • <Repositories> : 빌드할 때 접근할 저장소의 위치. 기본으로 메이븐 중앙 저장소인 http://repo1.maven.org/maven2 로 지정
  • <outputDirectory> : 컴파일한 결과물 위치. 기본으로 "target/classes"
  • <testOutputDirectory> : 테스트 소스를 컴파일한 결과물 위치. 기본으로 "target/test-classes"
  • <plugin> : 어떠한 액션 하나를 담당하는 것으로 가장 중요하지만 들어가는 옵션.

'IT > Spring' 카테고리의 다른 글

Spring AOP - 어노테이션 만들기  (0) 2019.11.28
설정파일 YAML  (0) 2019.04.30
에러 처리 (ControllerAdvice)  (0) 2019.04.29
인터셉터 (Interceptor)  (0) 2019.04.29
Spring 요청 메소드 (Request Mapping)  (0) 2019.04.13

댓글