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

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

eclipse -vm /usr/lib/jvm/java-1.5.0-sun/bin/java -vmargs -XX:MaxPermSize=128m -Xms128m -Xmx512m

'개발툴' 카테고리의 다른 글

conemu - 윈도우 CMD 대체 에디터  (0) 2016.12.01
리눅스 성능 모니터링 Command Line Tool  (0) 2015.11.09
Fildler 브레이크 포인트 적용하기  (0) 2013.09.06
Thymeleaf  (0) 2012.04.20
서버 모니터링 툴  (0) 2010.03.22
Posted by gt1000

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

2 메이븐 설치 및 템플릿 프로젝트 생성
 1) 설치
  - http://maven.apache.org/download.html
  - apache-maven-3.0.4-bin.zip 파일을 다운받아서 압축을 품
    D:\maven
  - 환경 변수에 MAVEN_HOME 추가
  - PATH에 MAVEN_HOME\bin 추가
  - 프롬프트에서 > mvn -version 으로 설치 확인
 2) 템플릿 프로젝트 생성
  - 메이븐은 프로젝트의 소스 디렉토리, 테스트 소스 디렉토리, 웹 리소스 디렉토리 등의 기본 설정이 예약되어 있음
  - 메이븐은 템플릿 프로젝트로 프로젝트를 생성하면 프로젝트의 뼈대를 자동 생성, 이 기능을 아키타입archetype이라 함
  -> cd D:\workspace-indigo\
   > mvn archetype:generate -DgroupId=com.samsunglife -DartifactId=webzine -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

     


  - 기본 소스 디렉토리는 src/main/java, 기본 테스트 소스 디렉토리는 src/test/java
  - groupId 는 일반적으로 생성하는 프로젝트 도메인명, artifactId는 프로젝트 이름, 자세한 내용은 뒤에서 설명

  <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>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>webzine</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>
  </project>
  pom.xml 내용은 뒤에서 설명
 3) 메이븐 기본 명령어
  - mvn [options] [<goal(s)>] [<phase(s)>] 형태로 실행 가능함
  - 메이븐 명령은 옵션, 골, 페이즈 조합으로 실행, 옵션은 메이븐 설정 파일(pom.xml)이 없는 곳에서도 실행 가능하며, 골과 페이즈는
    메이븐 기반으로 진행하는 프로젝트의 디렉토리에서 실행
  - mvn -help 로 사용할수 있는 명령 확인, 가장 많이 사용하는 옵션중 하나 mvn -Dmaven.test.skip=true
  - 여러개의 페이즈와 골을 실행할수 있음, 자세한 내용은 뒤에서 설명
  - > D:\workspace-indigo\webzine 로 이동해서
      mvn test 를 실행해 봄
      resources:resource에서 뭔가 하고, compiler:compile 에서 src/main/java 소스 컴파일, compiler:testCompile 에서 src/test/java 테스트 코드 컴파일
      마지막 단계 surefire:test 단계에서 단위 테스트 실행


 4) 웹 프로젝트 템플릿 생성
  - 앞의 예제에서 archetypeArtifactId 인자로 아키타입 아이디 전달, 내가 만들고 싶은 프로젝트는 jar 가 아니라
    웹 애플리케이션(war)
  - 총 58개의 아키타입 제공, archetypeArtifactId를 지정할수 있지만
    mvn archetype:generate 만 샐행해서 생성하는것도 가능
  - 메이븐은 아키타입의 종류에 따라 카탈로그를 나누어 관리
    internal : 58개, local:본인이 만든 아키타입을 관리하기 위한 카탈로그, remote:외부 286개
    기본 카탈로그 값은 remote, local
  - > mvn archetype:generate -DarchetypeCatalog=internal 을 실행하면 58개의 아키타입 목록 확인
  - > mvn archetype:generate 명령을 실행하면 대화 모드로 템플릿 프로젝트 생성
  - D:\workspace-indigo\webzine 디렉토리 삭제
  - > mvn archetype:generate -DarchetypeCatalog=internal 실행
      19번 입력, groupId : com.samsunglife, artifactId : webzine 입력
      Caused by: org.apache.maven.plugin.MojoFailureException: The desired archetype does not exist
      (org.apache.maven.archetypes:maven-archetype-webapp:RELEASE) =====> 뭔가 오류가 나서 패스
  - > mvn archetype:create -DgroupId=com.samsunglife -DartifactId=webzine -DarchetypeArtifactId=maven-archetype-webapp 실행
   

 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>

 - packaging 이 jar -> war <build><finalName> 옵션이 있으면 아마 war 파일 이름이 바뀜, 뒤에서 설명

Posted by gt1000

블로그 이미지
gt1000

태그목록

공지사항

어제
오늘

달력

 « |  » 2025.5
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 31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함