'artifactory'에 해당되는 글 2건

  1. 2008.07.01 Artifactory 에서 라이브러리 Import 또는 Export 하기
  2. 2008.06.27 나만의 Maven Repository 만들기... (2)
기본적으로 왠만한 라이브러리들은 중앙 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

요즘 한창 Maven 을 사용법을 익히고 있다.

자바지기님의 위키에서 Maven이란 녀석을 처음 접해보았고, 그 기능에 홀려서 한번 써보려구하는데 이 녀석 무지 까탈스럽기가 그지없다.

Maven 특유의 프로젝트 구조도 적응이 잘 되지 않고, 기본적으로 사용하는 Repository 에는 내가 원하는 라이브러리들이 다 준비되어있지도 않다. 몇일 전에 Oracle JDBC Driver 를 받을려고 pom 파일에 dependency 를 추가하고 빌드를 했더니 ojdbc14-10.2.0.2.0.pom만 다운되고 ojdbc14.jar 파일을 찾을 수 없다며 오류를 뱉어낸다.

이 외에도 몇가지 까탈스러운 점이 토비님의 'Maven 재도전기'에 잘 정리되어있다. 하지만, 특유의 장점을 칭찬하는 많은 글을도 볼 수 있었기에 조금씩 계속 써보려구 노력중이다.

이번에 자바지기님의 강좌글 중에 Artifactory 를 사용해서 개인 Maven Repository  만들 수 있는 글을 읽어보고 개인서버에 구축해보려구 한다.

 - http://www.jfrog.org/sites/artifactory/latest/ 에서 Artifactory 최신 버전을 다운 받는다.
 - JDK 5.x 이상을 설치한다.
 - Tomcat 5.5 이상을 설치한다.

가장 최신버전은 1.2.5 버전이 있는데 artifactory.config.xml 을 이용한 환경설정 중 무슨 문제가 있는지 계속 오류가 난다. 설치 가이드에 보면 JDK 1.6, Tomcat6.x 에 관한 문구가 있는데 아마도 그게 문제가 아닐까 싶다. 내 서버에는 현재 JDK 1.5.0.15, Tomcat 5.5.26 이 설치되어있다. 원인을 찾아보다 이틀을 허무하게 보내고난 후 포기하고 1.2.2 버전을 설치하는 단번에 설치된다.

다운 받은 Artifactory 최신 버전을 적당한 위치에 풀어둔다. 하위 디렉토리의 /etc/artifactory.config.xml 에서 환경설정을 그리고 /data 디렉토리에 Repository DB 파일이 구성된다.

Artifactory는 웹 애플리케이션으로 구현되어 있다. 압축 해제된 디렉토리 아래에 보면 webapps 디렉토리가 있는데 안에 들어있는 artifactory.war 파일을 TOMCAT_HOME/webapps 디렉토리 아래에 복사한다.

TOMCAT_HOME/bin 디렉토리 아래에 catalina.bat 파일을 열어 JAVA_OPTS 에 다음 항목을 추가한다.

JAVA_OPTS = -Dartifactory.home=d:/설치위치/artifactory-1.2.2

TOMCAT 에 추가하지 않고 시스템 환경 변수에 추가해도 된다. Artifactory 설치는 위 과정만 거치면 간단하게 설치할 수 있다.

<ARTIFACTORY_INSTALLATION_FOLDER>/etc/artifactory.config.xml 를 통해서 Repository 를 관리할 수 있다.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://artifactory.jfrog.org/xsd/1.0.0"
        xsi:schemaLocation="http://artifactory.jfrog.org/xsd/1.0.0
        http://www.jfrog.org/xsd/artifactory-v1_0_0.xsd">
    <!-- Backup every 12 hours -->
    <!--<backupCronExp>0 0 /12 * * ?</backupCronExp>-->
   
 <localRepositories>
  <localRepository>
   <key>private-individual-repository</key>
   <description>Private individual repository</description>
   <handleReleases>true</handleReleases>
   <handleSnapshots>true</handleSnapshots>
  </localRepository>
  <localRepository>
   <key>3rd-party</key>
   <description>3rd party jars added manually</description>
   <handleReleases>true</handleReleases>
   <handleSnapshots>false</handleSnapshots>
  </localRepository>
 </localRepositories>

 <remoteRepositories>
  <remoteRepository>
   <key>ibiblio</key>
   <handleReleases>true</handleReleases>
   <handleSnapshots>false</handleSnapshots>
   <excludesPattern>org/artifactory/**,org/jfrog/**</excludesPattern>
   <url>http://repo1.maven.org/maven2</url>
  </remoteRepository>
  <remoteRepository>
   <key>appfuse</key>
   <handleReleases>true</handleReleases>
   <handleSnapshots>false</handleSnapshots>
   <excludesPattern>org/artifactory/**,org/jfrog/**</excludesPattern>
   <url>http://static.appfuse.org/repository</url>
  </remoteRepository>
 </remoteRepositories>

</config>


위와 같이 설정하게 되면 중앙 Maven Repository와 appfuse의 Mirror 역할을 하게 될 Repository(ibiblio,appfuse) , 3rd party 라이브러리를 관리하기 위한 Repository(3rd-party), 개인적으로 개발한 라이브러리를 관리하기 위한 Repository(private-individual-repository)로 나누어서 관리한다. 물론 상황에 마추어 더 많은 Repository를 관리하는 것 또한 가능하다.

설정이 끝나면 Tomcat 을 가동하고 http://localhost:8080/artifactory 로 접근하면 다음 화면을 볼 수 있다.

사용자 삽입 이미지


Artifactory의 디폴트 사용자는 UserName : admin, Password : password 를 이용하여 로그인할 수 있다.

사용자 삽입 이미지


Artifactory 메인 페이지는 위와 같다.

좌측 메뉴에서 Browse the repository를 선택하면 다음 화면과 같다. 앞에서 설정한 4개의 Repository가 생성되어 있는 것을 볼 수 있다.

사용자 삽입 이미지


Security - Users 메뉴를 통해서 사용자를 추가하거나 기존 사용자의 정보를 변경 할 수 있다.

사용자 삽입 이미지


설치는 이로서 끝이고, 이제 클라이언트의 메이븐이 설치된 Artifactory 를 사용하도록 설정해주어야한다.

메이븐 설정파일의 기본 위치는 USER_HOME/.m2/settings.xml 에 있다. 해당 위치에 파일이 없다면 메이븐 설치폴더 하위의 /confg 에서 찾게된다. 파일을 열고<profiles> 태그안에 다음 내용을 추가한다.

 <profile>
  <id>default</id>
  <properties>
   <tomcat5x.home>D:\tomcat</tomcat5x.home>
  </properties>
  <repositories>
   <repository>
    <id>central</id>
    <url>http://localhost:8080/artifactory/repo</url>
    <snapshots>
     <enabled>false</enabled>
    </snapshots>
   </repository>
   <repository>
    <id>snapshots</id>
    <url>http://localhost:8080/artifactory/repo</url>
    <releases>
     <enabled>false</enabled>
    </releases>
   </repository>
  </repositories>
  <pluginRepositories>
   <pluginRepository>
    <id>central</id>
    <url>http://localhost:8080/artifactory/repo</url>
    <snapshots>
     <enabled>false</enabled>
    </snapshots>
   </pluginRepository>
   <pluginRepository>
    <id>snapshots</id>
    <url>http://localhost:8080/artifactory/repo</url>
    <releases>
     <enabled>false</enabled>
    </releases>
   </pluginRepository>
  </pluginRepositories>
 </profile>

그리고 위에서 추가한 프로파일을 전체 메이븐 프로젝트에서 사용하도록 다음 내용도 추가한다.

  <activeProfiles>
    <activeProfile>default</activeProfile>
  </activeProfiles>

위와 같이 설정 후 Maven 빌드툴을 실행하면 Maven 중앙 Repository 에서 다운되는 모든 라이브러리가 Artifactory Repository에 다음과 같이 저장된다.

사용자 삽입 이미지




※ 이 글은 자바지기님의 강좌글을 기초로 해서 작성되었습니다.
Posted by Arawn Trackback 1 : Comment 2