기본적으로 왠만한 라이브러리들은 중앙 Repository(http://www.ibiblio.org/maven/) 를 통해서 구할 수 있으나 앞서 글에서도 언급했듯이 모든 라이브러리들이 다 있는건 아니다. 이럴때는 직접 구해서 Repository 에 추가를 해야한다.

임포트 및 익스포트 방법을 알아보기에 앞서 메이븐이 Remote Repository(Artifactory를 이용해서 구축한 Repository 또는 위에서 언급된 중앙 Repository)에 접근하는 방법을 알아보면 다음과 같다.

<?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">

  // ... 생략!

  <dependencies>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring</artifactId>
      <version>2.0.8</version>
    </dependency>

    // 이외 필요한 라이브러리 추가

  </dependencies>

   // ... 생략!

</project>

위 내용은 메이븐 프로젝트 POM 파일의 내용 중 일부이다. 메이븐은 위에서 정의된 dependency 태그의 내용을 기준으로 Remote Repository 에서 라이브러리를 찾아 Local Repository에 다운로드한다.

사용자 삽입 이미지

Local Repository 를 루트(/) 로 보고 다운로드된 라이브러리의 구조 및 파일을 보면 다음과 같다.

/org/springframework/spring/2.0.8/spring-2.0.8.jar

자세히 보면 dependency 태그에서 정의된 내용을 기준으로 라이브러리가 관리되고 있다는것을 알 수 있는데, Maven이 Dependency 라이브러리를 관리하는 규칙은 다음과 같다.

/groupId/artifactId/artifactId-version.jar

윈도우 탐색기를 통해서 본다면 다음과 같은 구조를 가진다.

위와 같이 Maven이 Dependency 라이브러리를 관리하는 규칙을 Artifactory 또한 똑같이 가지게된다. 그리고, 다운로드된 파일을 보면 *.jar, *.pom, *.sha1 의 확장자를 가지는데 위에서 언급된 파일명 규칙은 jar 파일뿐만이 아니라 pom, sha1 에도 적용된다. 각각의 파일에 대한 관계는 임포트 방법을 알아볼때 다시 언급하겠다. 이제 Artifactory 를 이용해서 구축한 Maven Repository 에서 라이브러리를 관리하는 방법을 알아보자.

Artifactory 에서 외부 라이브러리를 추가하거나 출력하기 위해 Import/Export 메뉴를 사용한다.

위 화면이 Import/Export 화면이다. 임포트를 위한 메뉴(Repository Import, Repository Import from Zip) 두 가지와 익스포트를 위한 메뉴(Repository Export) 한 가지가 있다.

사용자 삽입 이미지


◆ Repository Import

임포트를 하기 위해서 준비해야할 사항은 다음과 같다.

 - 임포트할 파일을 준비한다. ( *.jar, *.pom, *.sha1 )
 - 라이브러리 관리 규칙에 의거해 디렉토리 구조를 구성한다.

메이븐은 총 3가지 종류의 파일로 하나의 라이브러리를 관리한다. 각각의 파일의 종류와 역할은 다음과 같다.

 - jar : 라이브러리 파일
 - pom : 라이브러리 정보 및 의존성 정의서 파일
 - sha11 : 다운로드시 파일 검사에 사용하는 CheckSum 파일

jar 파일은 라이브러리 파일 그 자체이다. 보통 자바 라이브러리들은 대부분이 jar 로 묶여서 배포가된다. jar 파일의 경우에는 관리 규칙에 의한 파일명(artifactId-version.jar)만 잘 지키면 별다른 문제가 없다. pom 파일과 sha1 파일의 경우에는 직접 만들어서 올려야한다. pom 은 대부분 다음과 같은 내용으로 이루어진다.

<?xml version="1.0"?>
<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>org.springframework</groupId>
  <artifactId>spring</artifactId>
  <version>2.0.8</version>
  <packaging>jar</packaging>
  <name>Spring Framework</name>

  <description>Spring Framework</description>

  <url>http://www.springframework.org</url>

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <scm>
    <connection>scm:cvs:pserver:anonymous:@springframework.cvs.sourceforge.net:/cvsroot/springframework/spring</connection>
    <developerConnection>scm:cvs:ext:username@springframework.cvs.sourceforge.net:/cvsroot/springframework/spring</developerConnection>
    <url>http://springframework.cvs.sourceforge.net/springframework/</url>
  </scm>

  <organization>
    <name>Spring Framework</name>
    <url>http://www.springframework.org/</url>
  </organization>

  <dependencies>
  <!-- External Dependencies -->
    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.5.3</version>
      <optional>true</optional>
    </dependency>

    // ... 이외 필요한 의존성 라이브러리들

  </dependencies>    
</project>

위의 내용 중 중요한것은 관리 규칙에 의거해서 작성해야할 groupId, artifactId, version 이다. Artifactory 는 pom 파일이 발견하면 앞에서 언급된 3가지 태그를 바탕으로 디렉토리 구조를 찾아서 넣어준다. 만약에 디렉토리가 없다면 오류가 발생한다. Artifactory 가 직접 디렉토리를 생성해주지는 않기 때문이다. 그리고 또 하나 중요한것은 dependency 이다. 이 라이브러리가 사용하는 의존성 라이브러리들을 적어두게되면 메이븐이 자동으로 의존성 라이브러리들을 모두 찾아서 다운로드 해준다. 즉, 위의 pom 을 기준으로 다운로드되는 라이브러리들은 spring 2.0.8, aopalliance 1.0, aspectj 1.5.3 이외에 의존성 라이브러리 등이 된다.

하지만, pom 파일이 필수 파일은 아니다. 만약 pom 파일이 없이 임포트를 하게되면 Artifactory 는 해당 라이브러리의 디렉토리 구조를 보고 groupId, artifactId, version 를 판단한다. 예를 들면 다음과 같은 디렉토리 구조를 가지는 라이브러리를 임포트하게 되면 각 태그들의 값은 다음과 같다.

/net/arawn/common-util/1.0.0/common-util-1.0.0.jar

groupId : net.arawn
artifactId : common-util
version : 1.0.0
filename : common-util-1.0.0.jar

sha1 파일은 Repository 에서 라이브러리를 다운 받은 후 파일검사를 위해서 사용하는 CheckSum 파일이다. Artifactory  서버에 임포트 할때는 파일이 없어도 문제가 없지만, 클라이언트의 메이븐이 해당 라이브러리를 다운받을때 sha1 파일이 없다면 경고 문구가 나온다.

이제 임포트 작업을 통해 Remote Repository 에 Oracle JDBC 를 등록해보자. 오라클 홈페이지에서 원하는 버전의 JDBC를 다운로드 받은 후 pom 파일과 sha1 파일을 작성한다.

Oracle JDBC Download Link

나의 경우에는 10.2.0.2.0 버전을 다운로드 받았다. 라이브러리 관리 규칙은 다음과 같이 정하고 디렉토리 구조 및 파일명을 변경하였다.

groupId : com.oracle
artifactId : ojdcb14
version : 10.2.0.2.0
filename : ojdbc14-10.2.0.2.0.jar

pom 파일은 다음과 같이 간단하게 작성하였다. 파일명은 ojdbc14-10.2.0.2.pom 이다.

<?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">
 
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.oracle</groupId>
 <artifactId>ojdbc14</artifactId>
 <version>10.2.0.2</version>

 <name>Oracle JDBC Driver</name>
 <description>Oracle JDBC driver classes for use with JDK1.4</description>
 <url>http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html</url>
 
 <licenses>
  <license>
   <name>Oracle Technology Network Development and Distribution License Terms</name>
   <url>http://www.oracle.com/technology/software/htdocs/distlic.html</url>
  </license>
 </licenses>
 
 <organization>
  <name>Oracle Corporation</name>
  <url>http://www.oracle.com</url>
 </organization>
 
</project>

마지막으로 sha1 파일은 ant 를 이용해서 작성해야한다. 이 외에도 방법이 있겠지만 아직까지 내가 찾아는 방법중 가장 쉬운방법은 ant 를 이용한 것이다. ant 의 사용법에 대해서는 생략하겠다.

build.xml 의 스크립트를 다음과 같이 작성하고 ant 를 실행하면 sha1 파일이 나온다.

<?xml version="1.0" encoding="UTF-8"?>
<project name="createchecksumfile" default="checksum" basedir=".">

 <target name="checksum" description="Generate checksum file for jar and pom">  
  <checksum algorithm="SHA" fileext=".sha1">
   <fileset dir="${basedir}" id="id">
    <include name="**/*.pom" />
    <include name="**/*.jar" />
    <exclude name="**/*.sh1" />
   </fileset>
  </checksum>
 </target>

</project>

작성된 sha1 파일은 jar, pom 에 대한 2개의 파일이다. 파일명은 ojdbc14-10.2.0.2.0.jar.sha1, ojdbc14-10.2.0.2.0.pom.sha1 이다.

디렉토리 구조와 정리된 파일을 윈도우 탐색기를 통해서 보면 다음과 같다.

사용자 삽입 이미지


위와 같이 보인다면 임포트를 위한 준비는 끝난것이다. 이제 임포트 메뉴(Repository Import, Repository Import from Zip)를 통해서 라이브러리를 넣어주면된다. Repository Import 는 서버의 로컬 디스크에서 직접 불러오는 방식이며, Repository Import from Zip 는 ZIP 형태의 압축파일을 업로드하여 추가하는 방식이다.

먼저 Repository Import 를 이용해서 넣어주려면 정리한 라이브러리를 서버측 로컬 디스크에 넣어주고(만약 작업을 서버에서 직접 했다면 그대로 진행하면된다.) Target local repository 콤보박스에서 라이브러리를 넣어둘 Repository 를 선택한다.

사용자 삽입 이미지


Import from path 에는 로컬 디스크의 물리적 경로를 그대로 적어주면 되는데, "/" 를 입력하면 현재 로컬 디스크의 구조를 보여준다. 경로는 임포트할 라이브러리(규칙에 의거에서 만들어진 디렉토리를 포함된)를 넣어둔 디렉토리까지만 입력한다. 즉, "D:/import/com/oracle/ojdcb14/10.2.0.2.0/**" 에 있다면 "D:/import" 까지만 입력하면된다.

사용자 삽입 이미지


이제 [import] 버튼 눌러서 실행하면 "Successfully imported 'D:/Server/artifactory/import' into 'ibiblio-cache'. " 문구가 보인다면 임포트를 성공적으로 입력한것이다. Repository Browser 통해서 확인해보면 다음과 같다.

사용자 삽입 이미지


Repository Import from Zip 를 이용해서 넣어주려면 라이브러리(/com/oracle/ojdcb14/10.2.0.2.0/**)를 그대로 Zip 로 압축하고 [찾아보기...] 버튼을 통해서 압축한 파일을 선택 후 [Upload] 를 버튼을 실행하면 파일이 업로드되고 다음과 같이 Target local repository 를 선택하라는 화면을 볼 수 있다.

사용자 삽입 이미지


사용자 삽입 이미지


Repository 를 선택한 후 [import] 버튼을 누르면 작업이 완료된다.

사용자 삽입 이미지


◆ Repository Export

Artifactory 는 라이브러리를 파일 구조로 관리하지 않고 자체 DB 를 만들어서 관리를 한다. 위치는 Artifactory 인스톨 디렉토리 하위의 /data 이다. 만약에 파일 구조로 라이브러리들이 필요할때는 Repository Export 메뉴를 통해서 출력하면 되는데, 원격으로 출력은 지원하지 않고 로컬 디스크로만 출력이 가능하다.

사용자 삽입 이미지


Source local repository 에서 출력할 Repository 를 선택 후 Export to path 에 로컬 디스크의 물리적 경로를 입력하고 [Export] 버튼을 눌러 작업을 실행하면 된다.

사용자 삽입 이미지
Posted by Arawn Trackback 0 : Comment 0