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


6 메이븐과 이클립스 통합
  - 복습
    . 메이븐은 빌드 단계를 미리 정의함
    . 미리 정의하고 있는 빌드 순서를 라이프 사이클이라함
    . 라이프 사이클의 빌드 단계를 페이즈라고 부름
    . 메이븐에서 모든 기능은 플러그인 기반으로 동작. 페이즈 또한 메이븐 플러그인을 통하여 실질적인 작업이 실행됨
    . 메이븐 플러그인은 하나의 플러그인에서 여러 작업을 수행할수 있도록 지원함
    . 메이븐은 플러그인에서 실행할 수 있는 각각의 작업을 골Goal 이라고 정의
      compiler 플러그인은 하나지만, 지원하는 골은 sourceDirectory의 소스 코드를 컴파일하는 compile 골
      testSourceDirectory의 테스트 소스 코드를 컴파일하는 testCompile골, compiler 플러그인에 대한 도움말을 제공하는 help골로 나눔

 1) 메이븐 eclipse 플러그인 적용 및 개발 환경 설정
  - 메이븐 eclipse 플러그인 http://maven.apache.org/plugins/maven-eclipse-plugin
    이클립스 IDE에서 제공하는 플러그인은 m2eclipse라고 하며, 뒷장에서 설명
  - 메이븐 빌드 툴의 플러그인 중에 메이븐 기반의 프로젝트를 이클립스 프로젝트로 자동 변환해 주는 플러그인
  가 메이븐 플러그인 적용
   - 메이븐에서 활용 가능한 플러그인은 대부분 다음 두사이트에서 확인 가능
     메이븐 사이트 http://maven.apache.org/plugins/index.html   
     모조프로젝트 http://mojo.codehaus.org/plugins.html
   - 메이븐 사이트에서 제공하는 플러그인은 메이븐의 핵심 기능을 담당하고 있는 플러그인. 메이븐 라이프사이클에 포함되어 활용 되거나
     메이븐을 이용하기 위하여 반드시 필요한 플러그인 제공. 모조프로젝트는 수많은 커뮤니티와 개발자에 의하여 개발되고 있는 플러그인을
     관리하기 위한 목적으로 생성된 프로젝트. 모조프로젝트는 메이븐 플러그인 개발을 위한 개발 환경과 개발 가이드라인 제공
   - 적용하고 싶은 플러그인을 찾았다면 먼저 플러그인에서 사용할수 있는 골 중에서 내가 원하는 작업을 지원하는 골이 있는지 확인
   - 프로젝트 소스 코드를 컴파일 할때 사용하는 compiler 플러그인을 메이븐에 적용하는 과정
    . 메이븐 사이트나 모자 프로젝트의 플러그인의 목록 페이지에서 검색을 통하여 compiler 플러그인 소개 페이지에 접속
      http://maven.apache.org/plugins/index.html -> compiler 클릭 -> http://maven.apache.org/plugins/maven-compiler-plugin/
      로 이동. 플러그인에 대한 소개, 사용가능한 골과 개요, 사용방법을 볼수 있음
    . 왼쪽 메뉴에서 Goals를 클릭하면 지원하는 골 목록을 확인. 각각의 골ㄹ은 상세 페이지로 이동
      compiler:compile 골 클릭 -> http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html
      왼쪽 메뉴에서 Usage와 Example 참고
   - 메이븐에서 플러그인을 설정하려면 <build>/<plugins> 엘리먼트에 설정. compiler 플러그인의 기본설정은
     <project>
   ...
   <build>
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>2.3.2</version>
         <configuration>
           <!-- put your configurations here -->
         </configuration>
       </plugin>
     </plugins>
   </build>
   ...
 </project>
   - 메이븐 사이트에서 제공하는 플러그인은 메이븐이 플러그인을 찾는 방식에 의해 별도의 설정없이 사용가능
     메이븐 설정 파일에 없는 플러그인을 실행할 경우 기본으로 groupId는 org.apache.maven.plugins
     artifactId는 maven-$name-plugin을 찾음. mvn test:test 와 같이 존재하지 않는 test 플러그인을 실행하면
    

     test 골을 실행하기 위하여 org.apache.maven.plugins:maven-test-plugin 이 중앙 저장소에 있는지 찾지만 없는 플러그인이기 때문에 빌드 실패
   - 플러그인 사용시 기본 설정외, 추가 설정의 경우
     http://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#compilerArgument
     에서 Option Parameters에서 찾을수 있음
     설정이 필요한 경우 <plugin/> 엘리먼트 아래에 <configuration/> 엘리먼트를 사용해 기본설정을 변경
     <project>
   [...]
   <build>
     [...]
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
         <version>2.3.2</version>
         <configuration>
            <source>1.4</source>
            <target>1.4</target>
         </configuration>
       </plugin>
     </plugins>
     [...]
   </build>
   [...]
     </project>
     플러그인에 전달할 인자는 <configuration/> 엘리먼트 하위에 키(key)와 값(value) 형태로 전달. 여기서 키<source/>, <target/>은
     Optional Paraments에서 제공하는 Name 값 사용
   - 플러그인에 전달할 인자의 데이터 유형
    . boolean : true 또는 false
    . int : 숫자(예:0,1,2)
    . String : 일반 문자 형태
    . File : 디렉토리 또는 파일 위치(예: d:\test.txt)
    . List : 여러개의 인자를 전달하는 경우
    . 나머지 예제는 상세 페이지 예제 참조
  나 웹진 프로젝트에 eclipse 플러그인 적용
   - 이클립스 플러그인은 메이븐 사이트에서 제공하는 플러그인이라 별다른 설정을 사용하지 않아도 사용 가능
   - 이클립스 플러그인에서 사용하는 골은 clean과 eclipse
     clean 골은 eclipse 골을 실행해 자동으로 생성한 이클립스 프로젝트 메타데이터 파일(.project, .classpath)을 삭제
     eclipse 골은 메타데이터 파일을 생성
   - 웹진 프로젝트에서 mvn eclipse:eclipse를 실행하면 pom.xml 파일의 설정을 활용하여 .project 파일과 .classpath 파일을 자동 생성
     웹진 프로젝트를 eclipse 플러그인을 활용해 이클립스 프로젝트로 만들면, 이클립스의 import 기능으로 가져오기 하는 것이 가능
     


     eclipse 플러그인을 통해 생성되는 .classpath 파일은    


     <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.7</version>
      <scope>test</scope>
    </dependency>
    의존 관계의 경우 .classpath 설정 파일에 다음과 같이 추가
    <classpathentry kind="var" path="M2_REPO/junit/junit/4.7/junit-4.7.jar"/>
   - 메이븐은 프로젝트와 의존 관계에 있는 라이브러리를 프로젝트에서 관리하지 않고 로컬 저장소에서 관리
     따라서 .classpath에 생성되는 라이브러리의 경로 또한 저장소를 가리키도록 생성
     단 이클립스에 프로젝트를 가져오기 한 후 M2_REPO 변수를 설정해야 함
   - 라이브러리 설정을 제외한 다른 부분은 이클립스에서 소스 폴더와 빌드한 결과물을 관리하기 위한 경로 설정
     pom.xml에 설정된 내용을 바탕으로 .classpath가 생성
     <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
     <classpathentry kind="output" path="target/classes"/>
   - 웹진 프로젝트를 이클립스로 가져오는 방법
     메뉴에서 File -> Import -> General -> Existing Projects into Workspace 를 선택후 import함
     


     이 경우 "Unbound classpath variable:'M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar' in project 'webzine'
     과 같은 오류가 발생한다고 함. .classpath 파일에 설정했는데 classpath variable에 M2_REPO 설정이 없음
     . M2_REPO 설정은
       Window -> Preferences -> Java -> Build Path -> Classpath Variables에서 추가
       난 sts를 사용해서 인지 오류가 안나고 M2_REPO가 classpath에 이미 기본적으로 잡혀 있었음
       M2_REPO 변수는 메이븐의 로컬 저장소 경로(USER_HOME/.m2/repository)를 설정, Classpath Variables 메뉴에서 New 버튼 -> Folder 버튼을 누른후 선택
       


   - 웹진 프로젝트는 웹서비스를 위한 프로젝트 이미로 개발의 편의성을 위해 이클립스 하위 프로젝트 중 하나인 Web Tools Project(WTP)에서 사용 가능한
     Dynamic Web Project로 생성. Dynamic Web Project로 생성하면 WTP의 기능을 이용하여 이클립스에서 톰캣 서버와 같은 서블릿 컨테이너에 바로 배포가능
     메이븐 eclipse 플러그인에서 WTP 기반의 Dynamic Web Project로 생성하려면 pom.xml 파일에 eclipse 플러그인을 설정


    <build>
    <finalName>webzine</finalName>
    <plugins>
      <plugin>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.8</version>
        <configuration>
          <wtpversion>2.0</wtpversion>
          <wtpContextName>/<wtpContextName>
        </configuration>
      </plugin>
    </plugins>
  </build>
     설정후 mvn eclipse:clean mvn eclipse:eclipse 를 실행하면 .project, .classpath 파일을 제거한후 다시 생성
     webzine 디렉토리 아래에 .setting 디렉토리가 생성되면 Dynamic Web Project로 생성
   - 빌드시 java compiler level does not match xxxxx..... 오류가 발생할 경우
     <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <version>2.1</version>
 <configuration>
  <source>1.6</source>
  <target>1.6</target>
 </configuration>
     </plugin>
   - 웹진 프로젝트를 Daynamic Web Project로 설정하는 작업 완료 후 서블릿 컨테이너를 설정하고 배포해야 함. 배포하려면 서블릿 컨테이너 추가 작업이 필요
     Window -> Preferences -> Server-> Runtime Environments
     


     위와 같이 서버를 추가한 다음 Window -> Show View -> Other -> Server -> Servers 로 이동한 다음 오른쪽 클릭 NEW -> Server 를 선택
     


  다 웹진 프로젝트 개발 시작
   - 소스 코드 다운로드
     <plugin>
 <artifactId>maven-eclipse-plugin</artifactId>
 <version>2.8</version>
 <configuration>
  <wtpversion>2.0</wtpversion>
  <wtpContextName>/</wtpContextName>
  <downloadSources>true</downloadSources>
  <downloadJavadocs>true</downloadJavadocs>
 </configuration>
     </plugin>
     mvn eclipse:clean eclipse:eclipse 를 실행하면 자바 소스 코드를 다운 받음 .classpath 파일을 열어 보면 아래와 같이
 <classpathentry kind="var" path="M2_REPO/commons-lang/commons-lang/2.5/commons-lang-2.5.jar" sourcepath="M2_REPO/commons-lang/commons-lang/2.5/commons-lang-2.5-sources.jar">
        <attributes>
        <attribute value="jar:file:/C:/Users/jeongdae/.m2/repository/commons-lang/commons-lang/2.5/commons-lang-2.5-javadoc.jar!/" name="javadoc_location"/>
         </attributes>
   </classpathentry>
     sourcepath 와 attribute 속성이 추가된것을 볼수 있음
   - webzine 프로젝트를 스프링 프로젝트로 만들경우 오른쪽 마우스를 누르고 Add Spring Project Nature 해 주면 됨. 이 경우 이 설정은
     .project 에 <buildcommands>, <natures> 속성이 추가됨
     이걸 pom.xml에서 설정하고 싶을 경우 아래 부분을 추가<additionalBuildcommands>, <additionalProjectnatures>
     <plugin>
 <artifactId>maven-eclipse-plugin</artifactId>
 <version>2.8</version>
 <configuration>
  <wtpversion>2.0</wtpversion>
  <wtpContextName>/</wtpContextName>
  <downloadSources>true</downloadSources>
  <downloadJavadocs>true</downloadJavadocs>
  <additionalBuildcommands>
   <buildcommands>org.springframework.ide.eclipse.core.springbuilder</buildcommands>
  </additionalBuildcommands>
  <additionalProjectnatures>
   <projectnatures>org.springframework.ide.eclipse.core.springnature</projectnatures>
  </additionalProjectnatures>
 </configuration>
    </plugin>   
 2) m2eclipse 플러그인 활용하여 빌드하기
  - 프로프트와 eclipse를 동시에 사용하는게 불편, 이클립스에서 모든걸 하고 싶은 경우
  가 m2eclipse 플러그인 설치
   - help -> install new Software... 로 이동 m2eclipse 플러그인을 설치 update url은 http://m2eclipse.sonatype.org/sites/m2e
  나 프로젝트 생성
   - File -> New -> Project -> Maven 메뉴로 이동, Maven Project 선택
     


     그림7 에서 Create a simple project(skip archetype selection) 으로 프로젝트를 생성하는 경우 불필요한 소스 코드를 제거하고
     JUnit 의존 관계 설정을 제거해야 함. 특히 maven-archetype-webapp 아키타입의 경우 소스 폴더가 자동으로 생성되지 않아 추가적으로
     생성해야 하는 불편함이 있음
  다 m2eclipse 플러그인 저장소 설정
   - m2eclipse 플러그인을 설치하면 프로젝트 좌측상단과 pom.xml에 푸른색 M 자가 표시
     M2_REPO classpath variables를 자동으로 추가
     Window -> Perferences -> Java Build Path -> Classpath Varible 메뉴로 이동해 보면 확인 가능
   - 로컬 저장소를 변경해야 하는 경우 USER/.m2/settings.xml 파일을 변경 한후
     Window -> Perferences -> Maven -> User Setting 메뉴로 이동 Update Settings 버튼을 클릭
  라 m2eclipse를 활용한 메이븐 실행
   - pom.xml 에서 오른쪽 마우스를 클릭 Run As 로 자주 사용하는 페이즈와 골을 실행할수 있음
   - m2eclipse를 활용하여 메이븐 명령을 실행하려면 먼저 USER_HOME\.m2 디렉토리에 settings.xml 파일을 생성해야 함
   - Run As 에서는 clean, install 같이 자주 사용하는 페이즈를 기본적으로 제공해줌. 제공하지 않는 페이즈나 골을 실행하려면
     Run As -> Maven build... 를 실행, 명령 프롬프트에서 메이븐을 실행할때와 똑같은 특정 플러그인의 골을 직접 입력해 실행할수 있음
     Goals : eclipse:clean eclipse:eclipse 를 입력하여 명령 프롬프트 없이 빌드 가능 하지만 매번 입력은 귀찮은 작업
     m2eclipse에서 실행한 결과는 Run -> Run History 메뉴나 이클립스 상단의 단축 아이콘으로 접근 가능
  마 m2eclipse를 활용한 설정 파일 및 의존 관계 관리
   - pom.xml 파일을 더블 클릭하면 Overview 화면이 기본으로 열리며, 하단에 여러개의 탭 화면을 확인할수 있음
   a. Dependencies 탭은 해당 프로젝트와 의존 관계에 있는 라이브러리를 관리
      Add 버튼을 누르고 http://search.maven.org 사이트에서 원하는 라이브러리를 검색하고 OK 버튼을 누르면 라이브러리가 자동추가됨
      


   b. Dependency Hierarchy 탭은 mvn dependency:tree, mvn dependency:resolve 를 실행했을때의 결과 화면을 보여줌
      dependency:resolve -> tells Maven to resolve all dependencies and displays the version. 프로젝트 모든 의존관계를 버젼까지 상세히 표시
      현재 프로젝트의 Hirerarchy 구조와 최종적으로 의존 관계에 있는 라이브러리를 한눈에 파악 가능
      


   c. Effective POM 탭은 mvn help:effective-pom 을 실행했을때 볼수 있는 소스 코드

 
     

 

 

 

 

 

 

 

 

 

 

 

Posted by gt1000

블로그 이미지
gt1000

태그목록

공지사항

어제
오늘

달력

 « |  » 2024.3
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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함