이 내용은 박재성님이 집필하신 [자바 세상의 빌드를 이끄는 메이븐] 책을 그대로 정리한 것이다.
회사에서 스터디를 하는데 문서 보안 때문에 어쩔수 없이 블로그를 이용하게 되었고,
위 내용은 박재성님의 허락을 받았습니다.

3 메이븐 설정 파일
 - 메이븐을 사용하려면 알아야 할 두가지 설정 파일이 있음
   메이븐 빌드 툴과 관련한 설정 파일로 settings.xml
   메이븐 기반 프로젝트에서 사용하는 설정 파일로 이름은 기본적으로 pom.xml, 이름 변경 가능
 1) settings.xml
  - MAVEN_HOME/conf 디렉토리에 위치, 모든 사용자에게 동일한 설정 제공
  - 사용자 별로 설정을 원한다면
    C:\Documents and Settings\[현재로그인아이디]\.m2 디렉토리에 settings.xml 설정 가능, 복사가 좋음
  - 메이븐은 빌드할때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 pc로 다운로드
    다운로드한 라이브러리는 개발자 pc의 특정 디렉토리에 위치하게 되는데 이 디렉토리를 로컬 저장소라 부름
    로컬 저장소 기본 설정은
    C:\Documents and Settings\[현재로그인아이디]\.m2\repository  
    이 경로를 바꾸고 싶다면 다음과 같은 방법으로 변경
    MAVEN_HOME/conf 디렉토리의 settings.xml 파일을 열어서 <localRepository>가 주석 처리 된것을 확인
    주석을 제거한 다음 원하는 경로를 세팅
    <localRepository>D:\repositories\mavenRepository</localRepository>
 2) pom.xml
  - 프로젝트 객체 모델 Project Object Model
  - 메이븐은 pom.xml 을 읽어 빌드 실행, 다른 파일 설정을 사용하고 싶은 경우 -f 또는 --file 사용
  - > mvn -f mypom.xml test
  - 메이븐은 크게 4개의 카테고리로 구분(프로젝트 기본정보, 빌드설정, 프로젝트 관계 설정, 빌드 환경)
    


  가. 프로젝트 기본 정보
    프로젝트 이름, 프로젝트 url, 프로젝트에 참여하는 개발자 목록, 프로젝트의 라이센스 설명 생략
    - name : 프로젝트 이름
    - url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능하다.
  나. 빌드설정
    - 메이븐 빌드와 관련된 기본적인 빌드 설정을 변경하기 위한 카테고리
      기본 소스 디렉토리나 리소스 디렉토리에 대한 변경, 플러그인 설정 변경, 새로운 플러그인 추가
      다양한 리포트 문서
  다. 프로젝트 관계 설정
    - 다른 라이브러리 또는 프로젝트와 의존 관계를 가지며, 각 프로젝트 사이에서 상속 관계를 가지는 경우도 있음
      이런 경우 각 프로젝트의 관계를 관리
  라. 빌드 환경
    - 모든 프로젝트는 다양한 환경에서 배포가 가능하며, 환경에 따른 변경 부분을 관리하는 카테고리
      메이븐에서는 다양한 환경을 지원할수 있도록 프로파일 기능을 제공, 뒤에 자세히 설명
  
   pom.xml
<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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.samsunglife</groupId>
  <artifactId>webzine</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>webzine Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>webzine</finalName>
  </build>
</project>
 
  . project : 최상위 엘리먼트
  . modelVersion : POM 모델의 버전, 가장 최근 버젼은 4.0.0, POM 모델이 변경되지 않으면 수정할 필요가 없음
  . groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정, 일반적으로 도메인 이름을 사용
  . artifactId : 프로젝트를 식별하는 유일한 아이디를 의미
  . packaging : 프로젝트를 어떤 형태로 패키징 할지를 결정, jar, war, ear, pom 등이 있음
  . version : 프로젝트의 현재 버젼, 개발이 완료된 버전의 경우 1.0, 2.0 과 같이 사용, 프로젝트 개발 중에는
              SNAPSHOT을 접미사로 사용할수 있음. SNAPSHOT은 메이븐 예약어, SNAPSHOT을 사용하면 라이브러리를
              다른 방식으로 관리
  . name : 프로젝트 이름
  . url : 프로젝트 사이트가 있다면 사이트 url 을 등록
  . dependecies : <dependencies/> 엘리멘트와 하위 엘리멘트인 <dependency/>는 프로젝트와 의존 관계에 있는
                  라이브러리를 관리. 메이븐 저장소에서 JUnit 3.8.1 버젼을 PC에 다운
   
    - 메이븐은 중앙 저장소를 가지고 있으며, 모든 라이브러리를 관리해야 하기 때문에 groupId + artifactId 값이 유일한 값
 3) 최상위 POM 설정 파일
  - 기본적인 프로젝트 디렉토리 구조와 메이븐에서 할수 있는 기본적인 플러그인 정보를 포함하고 있는 최상위 POM 설정 파일을 제공
    최상위 설정 파일은 메이븐에 포함되어 있는 jar 파일을 통해 배포
  - 최상위 POM 파일은 우리가 생성하는 모든 메이븐 설정 파일의 부모 POM 역할을 하며, 모든 설정파일이 이 파일을 상속
    



  - 상속하고 있는 POM 파일의 내용을 확인 하려면
    mvn help:effective-pom
  - > D:\workspace-indigo\webzine>mvn help:effective-pom 실행
    [최상위 POM 파일]
        

      

  - 최상위 설정 파일 설정
   . build : 프로젝트 빌드와 관련한 기본적인 소스 디렉토리 구조, 빌드 산출물 디렉토리 구조, 빌드시 사용할 플러그인 정보를 관리
   . sourceDirectory : 실제 서비스를 담당하는 자바 소스 코드를 관리하는 디렉토리, 기본 값은 src/main/java
   . testSourceDirectory : 테스트 소스를 관리하기 위한 디렉토리, 기본값은 src/test/java
   . outputDirectory : sourceDirectory 의 소스를 컴파일한 결과물이 위치하는 디렉토리, 기본값은 target/classes
   . testOutputDirectory : testSourceDirectory 의 소스를 컴파일한 결과물이 위치하는 디렉토리. 기본값은 target/test-classes
   . resources : 서비스에 사용되는 자원을 관리하는 디렉토리. 기본값은 src/main/resources
   . testResources : 테스트 시에 필요한 자원을 관리하기 위한 디렉토리. 기본 값은 src/test/resources
   . repositories : 빌드할때 접근할 저장소의 위치를 관리함. 메이븐 기본 저장소 url 은 http://repo1.maven.org/maven2
   . pluginManagement : 빌드 설정 과정에서 관리하는 플러그인 목록. 이 엘리먼트에 설정되어 있다고 반드시 사용되는 것은 아님
                       
  - 메이븐을 처음 사용하는 대부분의 개발자들은 최상위 POM에서 기본값을 정의하고 있기 때문에 메이븐 기반 프로젝트는 반드시 이
    구조를 따라야 함. 만약 최상위 POM에서 정의한 기본 설정을 변경하고자 한다면 하위 설정 파일에서 재 정의
  - 만약 src/main/java -> src/java 로 변경하고 싶다면
    <build>
        <finalName>webzine</finalName>
        <sourceDirectory>src/java</sourceDirectory>
        .... 생략 ....
    실습 해 보자
 4) 웹진 프로젝트 기본 디렉토리 설정 완료
  - war 프로젝트로 생성한 프로젝트는 웹 자원을 관리하는 디렉토리만 있고 자바 소스를 관리하는 디렉토리가 없음
    src 디렉토리 밑에 수동으로 자바 소스 디렉토리를 추가
    src/main/ 디렉토리 밑 java.com.samsunglife 추가
    src/ 디렉토리 밑에 test.java.com.samsunglifecom 추가
  - webapp 변경하는 예제
    src/main/webapp 를 webapp로 재 정의 하고 싶은 경우
    <build>
        <finalName>webzine</finalName>
        <plugins>
   <plugin>
   <artifactId>maven-war-plugin</artifactId>
   <configuration>
    <warSourceDirectory>webapp</warSourceDirectory>
   </configuration>
  </plugin>
 </plugins>
    </build>
  - mvn package 를 해 보면
    target 디렉토리가 생성됨
     



   . target/classes : src/main/java 디렉토리의 자바 소스가 컴파일된 class 파일과 src/main/resources 디렉토리 파일이 복사됨
   . target/test-classes : src/test/java 디렉토리의 자바 소스가 컴파일된 class 파일과 src/test/resources 디렉토리 파일이 복사됨
   . target/webzine : war로 패키징 하는데 필요한 모든 자원의 위치 target/classes 디렉토리 하위의 파일이
                      webzine/WEB-INF/classess 파일로 복사. target/test-classes 디렉토리 하위 파일은 제외
   . target/surefire-reports : 빌드하면서 생성된 리포트 문서의 위치
  - 웹 프로젝트의 뼈대를 만드는 방법은 두가지 방법이 있음
   . m2eclipse 이클립스 플러그인 기반으로 메이븐 프로젝트를 생성, 뒤에서 설명
   . 위에 방법과 같은 maven-archetype-webapp 로 만든후 자바 소스 디렉토리 수동 추가

Posted by gt1000

블로그 이미지
gt1000

태그목록

공지사항

어제
오늘

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함