22
JBoss User Group The Agile Dependency Manager 김김김 [email protected] 20100911 v1.0

The Agile Dependency Manager

Embed Size (px)

DESCRIPTION

The Agile Dependency Manager. 김병곤 [email protected]. 20100911 v1.0. 소개. JBoss User Group 대표 통신사에서 분산 컴퓨팅 기반 개인화 시스템 구축 Process Designer – ETL, Input/Output, Mining Algorithm, 통계 … Apache Hadoop/Pig/HBase/Cassandra Distributed Cache Log Aggregator CEP(Complex Event Processing) - PowerPoint PPT Presentation

Citation preview

Page 1: The Agile Dependency Manager

JBoss User Group

The Agile Dependency Manager

김병곤[email protected]

20100911 v1.0

Page 2: The Agile Dependency Manager

소개

JBoss User Group 대표 통신사에서 분산 컴퓨팅 기반 개인화 시스템 구축

Process Designer – ETL, Input/Output, Mining Algorithm, 통계…

Apache Hadoop/Pig/HBase/Cassandra

Distributed Cache

Log Aggregator

CEP(Complex Event Processing)

Mining Algorithm – Association Rule, K-Means, CF, …

SW 마에스트로 엔터프라이즈 분과 멘토 – Hadoop 멘토링 다수 책 집필 및 번역

JBoss Application Server 5, EJB 2/3

Oreilly RESTful Java 번역중

2

Page 3: The Agile Dependency Manager

최근 빌드 시스템의 변화 추세

3

Page 4: The Agile Dependency Manager

Ant 에서 Ivy 의 필요성

프로젝트를 구성하는 각종 라이브러리의 관리 문제라이브러리를 자동으로 다운로드 해준다면… .

각종 라이브러리간 종속성 문제이 라이브러리가 동작하려면 다른 라이브러리도 필요하다 !

소스코드에 라이브러리가 포함되어 있는 문제소스코드 Check Out 이 너무 느리다CVS/Subversion Repository 가 커진다

4

Page 5: The Agile Dependency Manager

Ivy 란 ?

5

Tool for Managing

Project Dependencies

= Apache Maven Dependency Management

Page 6: The Agile Dependency Manager

Project 의 Depedency

6

Page 7: The Agile Dependency Manager

Ivy 를 쓰려면 ?

7

JDK

Apache Ant

Internet Line

Page 8: The Agile Dependency Manager

Ivy 를 동작시키기 위한 최소의 파일은 ?

8

$PROJECT_HOME/ivy.xml (Ivy : Dependency)

$PROJECT_HOME/build.xml (Ant : Build Script)

<ivy-module version="2.0"> <info organisation="org.apache" module="hello-ivy"/> <dependencies> <dependency org="commons-lang" name="commons-lang" rev="2.0"/> <dependency org="commons-cli" name="commons-cli" rev="1.0"/> </dependencies></ivy-module>

<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="run"> ... <target name="resolve" description="--> retrieve dependencies with ivy"> <ivy:retrieve /> </target></project>

<dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.0</version></dependency> Maven Style

Ivy Style

DEMO

Page 9: The Agile Dependency Manager

Repository

JAR 파일 (Dependency) 의 보관 창고

Maven Style Repository 를 그대로 활용

3 가지 방식의 RepositoryLocal – 자신만 사용할 수 있는 Repository

Shared – 팀이 공유할 수 있는 Repository

Public – 외부에 공개되어 누구나 사용할 수 있는 Repository– 사내 Private Repository 를 운영하는 것이 좀더 바람직

9

Page 10: The Agile Dependency Manager

Maven Repository

10

DEMO Atifactory, Nexus

Page 11: The Agile Dependency Manager

Ivy 의 Repository Configuration

Localivy.local.default.root=/opt/ivy/repository/local(Default) ${ivy.default.ivy.user.dir}/local

Shared

ivy.shared.default.root=/opt/ivy/repository/shared(Default) ${ivy.default.ivy.user.dir}/shared

Publicibiblio Maven 2 Public Repository사용자가 추가 가능 (Artifactory or Nexus or …)

11

Page 12: The Agile Dependency Manager

Multiple Resolver

Repository 에 접근하는 다양한 방법을 제공Third Party 모듈은 Public, 내부 구현 모듈은 Private

개발한 모듈을 Local Repository 에 두고자 하는 경우모듈이 분산되어 있는 경우

$PROJECT_HOME/ivysettings.xml

12

<ivysettings> <settings defaultResolver="chain-example"/> <resolvers> <chain name="chain-example"> <filesystem name="libraries"> <artifact pattern="${ivy.settings.dir}/repository/[artifact]-[revision].[ext]" /> </filesystem> <ibiblio name="ibiblio" m2compatible="true" /> </chain> </resolvers></ivysettings>

commons-lang-2.0.jar

Page 13: The Agile Dependency Manager

Custom Repository

사내 Maven Repository 가 있다면 ?

13

<?xml version="1.0" encoding="UTF-8"?>

<ivysettings>

<settings defaultResolver="chained"/>

<resolvers>

<chain name="chained">

<ibiblio name="java.net2" m2compatible="true"

root="http://download.java.net/maven/2/"/>

<ibiblio name="jboss" m2compatible="true"

root="http://repository.jboss.org/maven2"/>

<ibiblio name="ibiblio" m2compatible="true"/>

</chain>

</resolvers>

</ivysettings>

DEMO Repository Configuration

Page 14: The Agile Dependency Manager

Dependency Exclusion

불필요한 Dependency 를 빼고 싶은 경우

14

<?xml version="1.0" encoding="UTF-8"?>

<ivy-module version="2.0”

xmlns:xsi="hssp://www.w3.org/2001/XMLSchema-inssance”

xsi:noNamespaceSchemaLocasion="hssp://ans.apache.org/ivy/schemas/ivy

.xsd">

<info organisasion="com.jbossug.jaxrs" module="jaxrs-examples"/>

<dependencies>

<dependency org="log4j" name="log4j" rev="1.2.16”>

<exclude org="javax.mail"/>

<exclude org="javax.activation"/>

<exclude org="org.apache.geronimo.specs"/>

</dependency>

<dependency org="org.slf4j" name="slf4j-log4j12"

rev="1.5.6”/>

</dependencies>

</ivy-module>

DEMO RESTful Java Example

Page 15: The Agile Dependency Manager

Ivy Integration : Step 1 Ivy Download & Install

Ant 내에서 Ivy 를 동작하도록 하기 위한 설정

15

<property name="ivy.jar.dir" value="${basedir}/ivy"/><property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/>

<!-- Ivy Download --><target name="download-ivy" unless="skip.download"> <mkdir dir="${ivy.jar.dir}"/> <echo message="installing ivy..."/> <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/2.1.0/ivy-2.1.0.jar" dest="${ivy.jar.file}" usetimestamp="true"/></target>

<!-- Ivy Installation --><target name="install-ivy" depends="download-ivy"> <path id="ivy.lib.path"> <fileset dir="${ivy.jar.dir}" includes="*.jar"/> </path> <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/></target>

Page 16: The Agile Dependency Manager

Ivy Integration : Step 2 Dependency Resolve & Build

Dependency 를 다운로드하고 빌드를 하기 위한 설정

16

<property name="lib.dir" value="${basedir}/lib"/>

<path id="lib.path.id"> <pathelement location="${build.dir}" /> <fileset dir="${lib.dir}"> <include name="*.jar" /> </fileset></path>

<target name="resolve"> <ivy:retrieve /></target> <target name="go" depends="install-ivy, resolve"> <javac srcdir="${src.dir}" destdir="${build.dir}" classpathref="lib.path.id"/> <java classname="example.Hello"> <classpath> <path refid="lib.path.id"/> </classpath> </java></target>

Page 17: The Agile Dependency Manager

IvyIDE

Eclipse 기반 Ivy 지원 도구

ivy.xml 파일에 정의한 dependency 를 Eclipse 에서 관리

Dependency 를 Java 프로젝트의 CLASSPATH 에 추가

각종 파일의 편집 기능 및 자동 완성 기능 제공

17

Page 18: The Agile Dependency Manager

IvyIDE

18

Page 19: The Agile Dependency Manager

IvyIDE

19

Page 20: The Agile Dependency Manager

IvyIDE

20

Page 21: The Agile Dependency Manager

참고

Sonatype Nexus 동영상

http://vimeo.com/1875558

IvyIDE

http://ant.apache.org/ivy/ivyde

Ivy Official Site

http://ant.apache.org/ivy

발표 자료 (Naver 개발자 센터 )

http://dev.naver.com/projects/edward/src

http://dev.naver.com/projects/edward/download

21

Page 22: The Agile Dependency Manager

22

Q & A

Q & A