Top Banner
Managing your dependencies with Xavier Hanin [email protected] http://incubator.apache.org/iv
30
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with

Xavier [email protected]

http://incubator.apache.org/ivy/

Page 2: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Speaker’s qualification

Xavier HaninCreator of Ivy

Member of JSR 277 (Java Module System) Expert Group

Java developer and consultant since 1999

Independant consultant

Page 3: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Agenda

What is Ivy?

Why Ivy?

A little bit of history

First contact

Where do those files come from?

Modular development with Ivy

Ivy’s spirit

Q/A

Page 4: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

What is Ivy?

A tool for managing project dependenciesrecording reporting

resolving publishing

Focus on flexibility and configurability

Ensure build reproducibility

Support large dependencies graph

Strong conflict management engine

Tight integration with Apache Ant

Compatible with Maven 2 repositories

Page 5: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Why Ivy?

Don’t reinvent the wheel: reuse

Modular systems are easier to develop and maintain

More and more complex components

Agile methodologies

=> Manage your dependencies

Page 6: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

A little bit of history

Created for the internal needs of Jayasoft

2004 2005 2006 2007

First open source version (0.5)

First release1.0

1.1

1.2

1.3

1.3.1

1.4

Join Apache Incubatorsponsored by Apache Ant

2.0.0-alpha-1-incubating

1.4.1

Page 7: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

First contact

No complex install, bootstrap!

<target name="install-ivy" description="--> install ivy"> <mkdir dir="${ivy.jar.dir}"/> <get src="${ivy.jar.url}" dest="${ivy.jar.dir}/ivy.jar" usetimestamp="true"/> <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 8: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

First contact

Get your first dependency

<ivy:retrieve organisation="org.apache.struts"

module="struts2-core"

revision="2.0.5"

inline="true"/>

Page 9: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Demo

Page 10: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

First contact

Introducing Ivy filesbecause one dependency is not enough

because dependencies declaration should not be part of the build.xml

because transitive dependencies require module metadata

Page 11: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Ivy files

<ivy-module version="1.5">

<info organisation="org.apache.ivy"

module="ivy-demo-2" />

<configurations>

<conf name="runtime"/>

<conf name="test"/>

</configurations>

<dependencies>

<dependency org="org.apache.struts"

name="struts2-core" rev="2.0.5"

conf="runtime->default"/>

<dependency org="junit"

name="junit" rev="3.8.1"

conf="test->*"/>

</dependencies>

</ivy-module>

Page 12: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Resolve dependencies

<ivy:retrieve

pattern="lib/[conf]/[artifact]-[revision].[ext]"/>

Page 13: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Understanding your dependencies

<ivy:report todir="report"/>

Page 14: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Understanding your dependencies

Page 15: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Where do those files come from?

Notion of repositorystores modules artifacts and metadata

very flexibleanything can be a repository!

possible to split modules across repositoriesex: metadata in one place and artifacts in another

ex: thirdparty modules on one server and internal on another

possible to split versions across repositoriesexample: one repository for integration builds, one for releases, one for archive, …

Page 16: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Where do those files come from?

Default settingsUse maven 2 public repository

Use a shared and local repository

Easy to use, but not suitable to all situations

Custom settingsDefine your own repository architecture

Simple xml file

Clean separation with metadata

Page 17: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Where do those files come from?

<ivysettings> <properties file="${ivy.settings.file}/ivysettings.properties" /> <settings defaultResolver="public" /> <include file="path/to/another-ivysettings.xml" /> <resolvers> <ibiblio name="public" m2compatible="true" root="http://repo1.maven.org/maven2" /> </resolvers></ivysettings>

Page 18: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Demo

Page 19: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Modular development with Ivy

Ivy helps resolve third party dependencies, but it’s even more useful for internal dependencies changing frequently

project A

project B

local repository

shared repository

Page 20: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Ivy file

<ivy-module version="1.5">

<info organisation="org.apache.ivy"

module="ivy-demo-3-B" />

<configurations>

<conf name="runtime"/>

<conf name="test"/>

</configurations>

<dependencies>

<dependency org="org.apache.struts"

name="struts2-core" rev="2.0.5"

conf="runtime->default"/>

<dependency name="ivy-demo-3-A" rev="latest.integration" />

</dependencies>

</ivy-module>

Page 21: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Settings

<ivysettings> <settings defaultCache="${ivy.home}/cache" defaultResolver="public" /> <resolvers> <chain name="main" returnFirst="true"> <filesystem name="local"> <ivy pattern="${ivy.settings.dir}/local/[module]/ivy.xml"/> <artifact pattern="${ivy.settings.dir}/local/[module]/[artifact].[ext]"/> </filesystem> <ssh user="${user}" keyFile="path/to/key/file" keyFilePassword="${password}"> <ivy pattern="ssh://yourserver.com/path/to/repos/[module]/[revision]/ivy.xml"/> <artifact pattern="ssh://myserver.com/path/to/my/repos/[artifact].[ext]"/> </ssh> </chain> <ibiblio name="public" m2compatible="true" root="http://repo1.maven.org/maven2" /> </resolvers> <modules> <module org="mycompany" resolver="main" /> </modules></ivysettings>

Page 22: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Demo

Page 23: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Ivy’s spirit: flexibility

Adapt to your environment and requirements

Many things are configurable and pluggable

Large choice of repositories, with very

flexible layout

Wide set of flexible ant tasks

Page 24: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Ivy’s spirit: flexibility

Some examples of pluggability

pluggable module descriptor format,

support Ivy files and maven 2 pom out of the box

pluggable versioning scheme,

define which version is greater than another

define your own version constraints

pluggable conflict managers

plug into the engine with triggers

Page 25: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Ivy’s spirit: flexibility

Some examples of tasks

use artifacts directly from Ivy cache

or copy them to your lib directory

reuse dependency resolution result

order a set according to dependencies

install modules and their dependencies from one repository to another one

Page 26: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Ivy’s spirit: flexibility

Some examples in Ivy filesdefine as many module configurations as you need

use powerful configurations mapping to suit your specific

cases, and define your own defaults

embed your configurations declaration or define them in

separate files

declare as many artifacts per module as you want

create your own extra attributes with no complex settings

Page 27: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Ivy / Maven2 comparison

Better compare Ant+Ivy vs MavenNo silver bulletAnt+Ivy Pros

FlexibleBetter controlNo « magic »Easier migration (if you already use Ant)

Maven Prosout of the box feature rich build systemreusable experiencebetter maven 2 compatibility

Page 28: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Future

Recruit contributors / committers

Graduate

Release 2.0

We need your help!

Page 29: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Links

Ivy web site:http://incubator.apache.org/ivy/

Download:http://incubator.apache.org/ivy/download.html

Mailing lists:[email protected]

[email protected]

Issue tracking:http://issues.apache.org/jira/browse/IVY

These slides:http://incubator.apache.org/ivy/presentations/apache-con-2007/slides.ppt

Page 30: Managing your dependencies with Xavier Hanin xavier@apache.org

Managing your dependencies with Ivy - Apache Con EU 2007

Questions

and (hopefully) Answers