티스토리 뷰

programming/JAVA와 maven

Maven이란?

dahye_e 2017. 2. 11. 23:02

메이븐이란? 

라이브러리에 대한 의존 관계를 관리, 프로젝트 빌드에 필요한 기능을 제공하는 역할을 합니다!

메이븐이 지원하는 기능에는? 

  • 빌드
  • 문서화
  • 리포팅
  • 의존 관계
  • 소스 코드 관리
  • 릴리즈
  • 배포

eclipse로 웹 개발을 하다가 마주하게 된 pom.xml..

처음 봤을 때는 이게 무슨 외계어인가 싶었습니다. '자바 세상의 빌드를 이끄는 메이븐' 이라는 책을 읽으면서 더욱 친숙해 질 수 있었던 maven!

maven은 eclipse에 기본으로 탑재되어 있다고 합니다! (메이븐 = pom.xml)이라는 말이 있습니다.

maven의 구조

아래는 처음 spring project를 생성하게 되면 기본적으로 생성되는 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/maven-v4_0_0.xsd"> <!-- <project> : pom파일 최상위 element -->
<modelVersion>4.0.0</modelVersion> <!-- pom의 model version -->
<groupId>com.test</groupId> <!-- 프로젝트 조직의 고유 아이디, 일반적으로 도메인 이름을 쓴다 -->
<artifactId>test</artifactId> <!-- 프로젝트를 식별하는 고유 아이디 -->
<!-- groupId + artifactId 는 유일한 값이어야 한다. -->
<name>test</name> <!-- 프로젝트 이름 -->
<packaging>war</packaging> <!-- 여기에서 war은 웹 어플리케이션을 의미. jar이면 일반 어플리케이션이다! -->
<version>1.0.0-BUILD-SNAPSHOT</version> <!-- 프로젝트 현재 버전, SNAPSHOT은 메이븐의 예약어이다. -->
<properties>
<!-- properties 안에 있는 정보는 버전 정보를 동일하게 사용하기 위해 리펙토링 하는 부분. -->
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<!-- dependencies태그 안에는 프로젝트와 의존 관계에 있는 라이브러리들을 관리합니다.
아래 보이는 것과 같이 spring, log, servlet과 같은 라이브러리는 자동적으로 스프링 프로젝트를 생성하면
생성되는 dependency이다. -->
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- AspectJ -->
<!-- Logging -->
<!-- Servlet -->
<!-- Test -->
</dependencies>
<build>
<!-- build태그 안에는 프로젝트 빌드와 관련된 디렉토리 구조, 빌드 시 사용할 plugin정보를 관리한다. -->
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
view raw pom.xml hosted with ❤ by GitHub


maven의 라이프사이클

최종적인 빌드 순서는 compile-> test->package이다. 

1) compile : src/main/java 디렉토리 아래의 모든 소스 코드가 컴파일 된다.

2) test : src/test/java, src/test/resources 테스트 자원 복사 및 테스트 소스 코드 컴파일 된다.

* junit : 단위 테스트 프레임워크. 테스트 단계를 거치기 위해 의존 설정을 해준다.

3) packaging : 컴파일과 테스트가 완료 된 후, jar, war 같은 형태로 압축하는 작업.


*프로젝트를 처음 시작할때가 두번째 시작할때보다 느린 이유는 처음 실행할때 관련된 라이브러리를 다운로드 받기 때문입니다.

*짝프로그래밍 : 두 명 이상이 짝을 지어서 프로젝트를 하는 것. (책에 나왔던 단어라 정리!)


참고:  '자바 세상의 빌드를 이끄는 메이븐' - 박재성

'programming > JAVA와 maven' 카테고리의 다른 글

[JAVA] 익명클래스  (0) 2017.04.06
[JAVA] 내부클래스  (0) 2017.04.05
[JAVA] interface (default, static메소드)  (2) 2017.04.03