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

11 메이븐 사내 저장소 설치 및 활용
 - 모듈을 사용할 경우 리소스 파일들을 각 모듈에 복사해서 사용해야 하는 이슈가 발생함
   공통 리소스 파일들을 관리하기 위한 프로젝트를 생성한다고 가정
 1) antrun 플러그인을 활용한 리소스 중복 제거
  - 공통 리소스 파일을 관리하기 위한 별도의 프로젝트를 만들고 여기서 관리하는 리소스 파일들을 모듈들에 복사해 주는 기능을 하는 플러그인
  - 생략. 각자 찾아 볼것
 2) 메이븐 프로파일을 활용한 공통 리소스 중복 제거
  - 리소스 파일을 jar 로 묶어서 배포
  - jar 로 묶을 때 profile 기능을 사용해서 예를 들면
    <artifactId>resource-${environment}</artifactId>
    와 같이 설정한후 리소스를 참조하는 프로젝트에서 dependencies 속성을 이용해서 가능
  - 자세한 내용은 생략. 귀찮음
 3) 메이븐 사내 저장소 설치 및 활용
  - 메이븐의 라이브러리 관리 방식은 메이븐 중앙 저장소 또는 외부 원격 저장소에서 라이브러리를 관리하고 이를 로컬저장소에 다운로드 하는 방식
  - 우리가 필요한 모든 라이브러리를 메이븐 저장소에서 관리하는 것은 아님
  - 사내에서 자체적으로 개발해 사용하는 라이브러리는 외부에 공개할수 없음
  - 내부 메이븐 저장소의 장점
    . 라이브러리 버전이 충돌할 가능성을 최소화
    . 중앙 저장소에서 관리하지 않는 라이브러리를 모든 개발자가 수동으로 로컬 저장소에 배포하는 문제를 해결, 수동 작업을 줄임
    . 독립적으로 관리하는 여러 개의 로컬 저장소 보다 의존 관계에 있는 모든 라이브러리를 하나의 저장소에서 관리 가능
    . 메이븐 중앙 저장소는 라이브러리 수, 사용자가 많기 때문에 처음 다운 로드 시간이 상당히 많이 걸림, 시간 단축
  


   가 넥서스를 이용한 사내 메이븐 저장소 설치하기
    - 오픈 소스 툴로 http://nexus.sonatype.org
      자바 기반이며, 자바의 서블릿 컨테이너를 설치하고 환경을 설정할 수 있는 수준이면 가능
    - 설치 순서
      메뉴얼 http://www.sonatype.com/books/nexus-book/reference/install.html
      a http://www.sonatype.org/nexus/go 에서 최신 버전 다운
      b 다운받은 zip 파일을 TOMCAT_HOME/webapps 디렉토리에 복사, 압축해제, 서비 재시작
      c http://localhost:8080/nexus-webapp-1.9.2.4
      d <Context docBase="next-webapp-1.9.2.4" path="/" reloadable="false" />
        를 server.xml에 추가하고 ROOT 디렉토리를 삭제하면 http://localhost:8080으로 접근 가능
    - 웹 페이지 우측 상단에 있는 Log In 링크 클릭, admin/admin123
   나 넥서스 저장소 설정하기
    - 왼쪽 메뉴의 Repositories가 넥서스 기본 저장소
    - Type 은 프록시 저장소(proxy), 호스티스 저장소(hosted), 버추얼 저장소(virtual), 저장소 그룹(group)
     . 프록시 저장소(proxy) - 외부에 있는 메이븐 공개 저장소에 대한 프록시 역할을 하는 저장소
     . 호스티스 저장소(hosted) - 사내에서 관리하는 저장소
     . 버추얼 저장소(virtual) - 넥서스에 이미 설정되어 있는 저장소에 대하여 다른 URL로 접근할 수 있도록 지원하기 위한 논리적인 저장소
     . 저장소 그룹(group) - 넥서스에 설정한 저장소의 그룹. 메이븐 외부 저장소를 추가 하지 않고 넥서스 저장소 그룹에 해당 저장소를 추가하면 됨
    -


      를 보면 많은 저장소와 url 이 있으나 프로젝트에서 사용할 저장소는 Public Repositories와 Public Snapshot Repositories 저장소 그룹만 설정하면 됨
      저장소가 추가 되거나 변경될 경우 넥서스 관리 툴에서 변경하면 됨
    - 메이븐은 기본적으로 <repositories /> 엘리먼트에 설정되어 있는 저장소를 통하여 라이브러리를 다운로드
      메이븐 중앙 저장소 대신 넥서스 저장소를 사용하기 위한 설정은 USER_HOME/.m2/settings.xml 을 다음과 같이 수정
    -


     . mirror 설정은 모든 저장소에 대한 요청을 넥서스 저장소로 접근하도록 함
     . <repositories/> 엘리먼트와 플러그인 저장소 <pluginRepositories/> 를 설정하기 위한 프로파일을 생성, 이 프로파일이 활성화 되도록
       activeProfile 엘리먼트에 설정
       새로운 프로파일을 만들어 저장소를 설정하는 이유는 모든 메이븐 설정 파일은 최상위 POM을 상속하는데 최상위 POM에서 메이븐 중앙 저장소를
       설정하고 있기 때문에 가능하면 새로운 프로파일을 만들어 명확하게 분리하기 위함
    - pom.xml 에
          <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.1.1.RELEASE</version>
    </dependency>
      을 추가하고 빌드를 하면
     


      과 같이 오류가 발생           
   다 넥서스에 저장소 추가
    - Repositories 화면에서 상단의 add 클릭
      CarbonFive 플러그인 저장소(http://mvn.carbonfive.com/public)을 추가
      id : carbonfive, Repository Name : CarbonFive Plugin,
      Remote Storage Location : http://mvn.carbonfive.com/public
      Save 버튼을 누르면 넥스서에 CarbonFive 저장소 등록
    - 넥서스 저장소를 Public Repositories 저장소 그룹에 추가
      Public Repositories를 선택하고 하단의 Configuration 탭으로 이동
      좌측이 등록되어 있는 저장소
      우측이 추가할수 있는 저장소
      좌측으로 이동시켜 Save 버튼을 누름
   라 넥서스에 라이브러리 배포하기
    - 내부 라이브러리를 배포하는 방법은 넥서스 관리툴과 메이븐 빌드를 실행해 배포하는 방법이 있음
    - 넥서스 직접 배포
      넥서스 관리툴 -> Repositories -> 3rd Party 저장소 선택 Artifact Upload 탭에 접근
      POM 파일을 이용하는 방법과 개발자가 직접 입력하는 방법이 있음
      배포 오류가 남 왜 나는지 몰것다. ㅠ.ㅠ
    - 로컬 저장소에 라이브러리 배포하는 방법
      mvn install:install-file -DgroupId=<외부 라아브러리 groupId>
          -DartifactId=<외부 라이브러리 artifactId>
          -Dversion=<버전>
          -Dfile=<외부 라이브러리가 위치한 패스>
          -Dpackaging=jar
          -DgeneratePom=true
    - 공통 리소스를 관리하는 모듈을 넥서스 저장소에 자동으로 배포하는 과정
      넥서스에 개발 라이브러리를 배포하려면 넥서스에 배포를 담당하기 위한 사용자를 추가해야 함
      deployment 사용자의 비밀번호도 deployment로 설정
      인증 설정은 USER_HOME/.m2/settings.xml 에서 설정
      <servers>
        <server>
            <id>nexus-deployment</id>
            <username>deployment</username>
            <password>deployment</password>
        </server>
      </servers>
      구문을 추가후 모듈의 pom.xml 에 아래 구문을 추가
      <project>
    [...]
    <distributionManagement>
        <repository>
            <id>nexus-deployment</id>
            <name>Nexus Repository</name>
            <url>http://localhost:8080/content/repositories/snapshots</url>
        </repository>
    </distributionManagement>
      </project>
 4) 웹 공통 리소스에 대한 관리
  - 자바스크립트, css 각 모듈에서 공통으로 사용하는 웹 페이지와 같은 자원이 있음
  - 웹 공통 자원은 프로젝트를 진행하면서 변경될 가능성이 크고, 모든 개발자가 지속적으로 변경할 수 있어야 하므로
    사내 저장소에 배포 관리하는 방법은 한계가 있음
  - FileSync 플러그인을 활용해 이 문제를 해결하는 방법이 나오나 생략하겠음. 귀찮음
 * mvn -pl core clean install 같이 하면 여러 모듈 중에서 core 모듈만 빌드











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

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함