Release Notes

The following pages list the changes introduced in each revision of Ivy since its first public version on january 2005.
For each revision you will be able to see the complete list of changes (bug fixes, improvements and new features).

The most recent version also feature a new and noteworthy section.

Refer to these pages if you want to know the benefits of upgrading to a newer version of Ivy.



The latest stable version is 1.4.1

0.5 - 2005-01-12

Ivy 0.5 is the first public version of Ivy.

Downloads

ivy-0.5-bin.zip (731 kB)
ivy-0.5-src.zip (501 kB)
ivy-0.5-src-withdep.zip (764 kB)

0.5.1 - 2005-01-16

Changes log

- Bug fix: NPE in publish task.
- Documentation update.

Downloads

ivy-0.5.1-bin.zip (742 kB)
ivy-0.5.1-src.zip (511 kB)
ivy-0.5.1-src-withdep.zip (774 kB)

0.6 - 2005-02-03

Changes log

+ functional
- added haltonfailure attribute on resolve and retrieve task, so that build can be halt when resolve or retrieve fails
- added dependency artifacts filtering feature, enabling to work better with ibiblio
- ibiblio resolver can now be configured to use any maven like repository, with root and pattern attributes
- added download progression info on resolve
- default cache is now in user home (.ivy-cache in user home), so that cache is shared by default for all projects of the same user
- added public access to method getDependencies(...) in Ivy, which resolve dependencies without downloading artifacts
- added DualResolver, which allows to have ivy files in one place and artifacts in another one

+ non functional
- added some unit tests
- deep review of ivy file reference documentation

+ bugs and refactoring
- bug fix: SimpleURLResolver not handling the case when there is no ivy file
- refactoring: URLResolver renamed to AbstractURLResolver
- refactoring: SimpleURLResolver renamed to URLResolver

Downloads

ivy-0.6-bin.zip (935 kB)
ivy-0.6-src.zip (723 kB)
ivy-0.6-src-withdep.zip (986 kB)

0.6.1 - 2005-02-11

Changes log

+ bugs fix
- conf 'extends' problem with publications
- typedef badly handled in ivyconf.xml
- default properties loading in ivy configure loaded using task classloader

Downloads

ivy-0.6.1-bin.zip (947 kB)
ivy-0.6.1-src.zip (739 kB)
ivy-0.6.1-src-withdep.zip (1002 kB)

0.7 - 2005-03-11

Changes log

- added latest sub revision feature: you can now select the latest sub revision of a module using a +. For instance, "1.0+" selects the latest revision starting with 1.0. (thanks to jonas for the idea)
- haltonfailure now defaults to true (as suggested by Jeroen)
- shorter info lines to better view important info (as suggested by Jeroen)
- retrieve now checks if files are up to date before copying them from cache. This feature can be disabled using the checkUpToDate attribute in ivy configuration file.
- do not download dependencies when not necessary during publication (as suggested by Daniele)
- bug fix: better handling of publish without recursive delivery

Downloads

ivy-0.7-bin.zip (951 kB)
ivy-0.7-src.zip (745 kB)
ivy-0.7-src-withdep.zip (1008 kB)

0.8 - 2005-03-30

Changes log

Note: this version is a major update compared to version 0.7, and contains several API breaks. Ivy files and configuration are compatible, but this is not the case of Ivy Java API. Some defaults changes also, especially default resolver which is no longer ibiblio but ivyrep (but ivyrep is compatible with ibiblio, so it should no break your builds).

- url resolver now handles latest with file urls and http ones (tested only with apache server, many thanks to Glen Marchesani for its contribution)
- added publish artifacts feature, which enable to publish declared artifacts of a module to a repository described by a dependency resolver. It currently works only with filesystem resolver.
- added conflict management at resolve time: during resolve, modules in conflict can be evicted and thus not downloaded
- added ivyrep resolver, using ivyrep to find ivy files, and ibiblio for artifacts
- use ivyrep instead of ibiblio as default resolver
- added more info in ivy files (description, homepage, ivy authors, license, public repository, ...)
- added validate attribute on resolve, retrieve and publish, which allows to disable ivy file validation against ivy.xsd (useful to parse future compatible ivy files)
- ant properties are now available in ivyconf file
- unified default properties in ivyconf, with better independance from url or file
- added ext on artifacts: this enable to distinguish artifact extension from artifact type, util in cases where it differs (example: 'src' type with 'zip' extension, 'ivy' type with 'xml' extension, ...)
- added latest strategy concept: the way to determine which artifact is the latest is now configurable on resolvers handling latest.
- added parameter on chain resolver to say if it should return first found or try to find the latest among all if asked
- a module can now publish no artifact, useful for virtual modules consisting only of integration of other modules
- now cache layout is configurable, using cacheIvyPattern and cacheArtifactPattern attributes on conf element in ivyconf.xml
- changed default cache layout: artifacts are separated by type
- added cachepath task, which enables to build an ant path of artifacts in cache required for a conf

Downloads

ivy-0.8-bin.zip (946 kB)
ivy-0.8-src.zip (761 kB)
ivy-0.8-src-withdep.zip (1024 kB)

0.9 - 2005-04-06

Changes log

Note: this version is not compatible with preceding ones.
The way to indicate patterns (in configuration as well as in some tasks) has changed: brackets are used for tokens instead of ant notation, which is kept for variables.
Thus a pattern previously noted:
${repository.dir}/${organisation}/${module}/${artifact}-${revision}.${ext}
will now be:
${repository.dir}/[organisation]/[module]/[artifact]-[revision].[ext]

This has been done to prevent collision and make a better separation between variables and tokens.
Moreover migration costs should not be too high, ivy files not being concerned by the change.

- ChainResolver are now able to publish (delegating the call to the first resolver in the chain)
- DualResolver sub resolvers are now registered in Ivy
- more precise message on eviction
- add validate attribute on most resolvers
- ivy files validation handling review
- use ivy variables in ant tasks to get default values for attributes
- documentation update for configuring ivy
- FIX: dependencies order not taken into account during resolve
- FIX: evicting modules also evict confs
- FIX: NPE during resolve when a dependency ivy file has no publication date
- FIX: check nullity of artifact download reports

Downloads

ivy-0.9-bin.zip (958 kB)
ivy-0.9-src.zip (776 kB)
ivy-0.9-src-withdep.zip (1039 kB)

1.0 - 2005-04-26

1.0-rc3 has been promoted to 1.0 on 2005-04-26

See child pages for details about changes introduced by each release candidate

Known bugs and limitations:
- cyclic dependencies result in StackOverflowError
- infinite loop in rare cases when a conflict occur between a latest subversion and a fully resolved revision
- url connections not closed properly when not using commons-httpclient
- latest does not work with http urls in some cases, when the name of the link is truncated in the web page

Downloads

ivy-1.0-bin.zip (1166 kB)
ivy-1.0-src.zip (904 kB)
ivy-1.0-src-withdep.zip (1167 kB)

1.0-rc1 - 2005-04-12

Changes log

- add report task, which enables to generates reports of dependencies, including a graph ready to be layed out by yEd
- add exclude feature in dependency
- include exclude feature now handles regexps
- new latest strategy: latest revision now uses a "php version_compare" like algorithm, whereas lexicographic comparison is now available in latest lexicographic
- enhance xml resolve report details
- FIX: better separation between root configurations
- FIX: XmlModuleDescriptorUpdater now preserves xml header
- FIX: modules figures in report (displayed at the end of resolve)

Downloads

ivy-1.0-rc1-bin.zip (1161 kB)
ivy-1.0-rc1-src.zip (984 kB)
ivy-1.0-rc1-src-withdep.zip (1247 kB)

1.0-rc2 - 2005-04-18

Changes log

- IMPROVE: improved messages: more debug, more verbose, and more details on failures
- FIX: bug with '\' in path patterns
- FIX: bug with relative paths patterns
- FIX: configure task tries ivy.conf.file as relative to base dir and to current dir
- FIX: file system resolver publishes ivy files with ivy pattern
- FIX: 0 content length considered as non existing (behaviour of jre 5.0 on linux)
=> empty ressources are now considered as non existing

Downloads

ivy-1.0-rc2-bin.zip (1164 kB)
ivy-1.0-rc2-src.zip (987 kB)
ivy-1.0-rc2-src-withdep.zip (1250 kB)

1.0-rc3 - 2005-04-21

Changes log

A few bugs have been discovered in the 1.0-rc2, so here is the reason for this rc3, which should fix these bugs.
If no bug is discovered, 1.0-rc3 should be promoted to 1.0 on 2005-04-26

- IMPROVE: added debug messages on variables setting
- FIX: ivyconf now able to load a properties file given as url
- FIX: deliver pub date now actually defaults to 'now'
- FIX: all tasks attributes now substitute ivy variables

Downloads

ivy-1.0-rc3-bin.zip (1168 kB)
ivy-1.0-rc3-src.zip (993 kB)
ivy-1.0-rc3-src-withdep.zip (1256 kB)

1.1 - 2005-06-13

Changes log

- remote configuration (if available) of ivyrep and ibiblio patterns and roots
- new detailed messages when ivy fails to reach an url (thanks to Nicolas)
- new artifactproperty task, which enables to set a property for each dependency artifacts resolved by ivy
- new defaultconf attribute in ivy file dependencies, to change the default conf to use in the file when no conf is specified for a dependency
- add the ability to change the xsl file and report name pattern used by report task
- http listing now compatible with tomcat listing (tested with 5.0.28)
- pub revision in deliver task now defaults to timestamp if not provided by any other way
- debug messages improvements, with configuration dump among others
- new var task, enables to set ivy variables from ant
- now defaults for ivyrep and ibiblio resolver are configurable by variables
- refactoring: introduce the notion of BasicResolver, Repository, Resource, RepositoryResolver, making much easier the task of writing basic resolvers
- added checkmodified attribute on all basic resolvers, which defaults to ${ivy.resolver.default.check.modified}
This makes ivy check last modified date of ivy files to see it its cache is up to date
- artifacts download are now first made to a temp file, which is renamed only at the end of the download.
This prevent interrupted downloads to be considered as finished
- FIX: handle proxy configuration with http-client (thanks to Nicolas)
- FIX: remove dependency on ant outside of ant integration classes
- FIX: resolve problem when conflicts on latest revisions
- FIX: allow use of any kind of URL in IvyRepResolver (both ivyroot and artroot) and IBibiblioResolver
- FIX: chain resolver can now be used for artifacts part of dual resolver
- FIX: now detects and warn about circular dependencies
- FIX: cachepath task now takes pathid as parameter instead of id, to prevent
special handling from ant
- FIX: ivy.xsd: set artifact minOccurs to 0 in publications

Thanks to John Shields from Robert Half International, Inc.:
- FIX: no more infinite loop when a conflict occurs between a latest subversion and a fully resolved revision
- FIX: BasicURLHandler now closes its connections
- FIX: ApacheURLLister now works with capital letter in revisions and truncated names
- now use of ivy variables is allowed in ivy files
- added a null check in pattern helper substitute

Downloads

ivy-1.1-bin.zip (999 kB)
ivy-1.1-src.zip (738 kB)
ivy-1.1-src-withdep.zip (1001 kB)

1.2a - 2005-09-16

Changes log

Note: due to a bad delivery operation, version 1.2 found on this site from 2005-09-14 to 2005-09-16 was not the intended 1.2 version. Please use 1.2a instead

- new ivy.deps.changed property set if there are changes since last resolve (IVY-71)
- new buildlist task: calculate order of dependencies of subprojects for easy multi-projects builds (IVY-69)
- accept organization as token (IVY-55)
- added type filtering mechanism on resolve task (IVY-45)
- detect and warn about resolver using ivy cache as repository (IVY-53)
- new transitive attribute on dependency, which enable to disable transitive dependency management on a particular dependency (thanks to Ingo Adler) (IVY-20)
- new '@' in dependency configuration mapping declaration, used to indicate that a configuration maps to itself useful with *, '*->@' meaning that all configurations of the module maps to their equivalent (same name) in the dependency (IVY-52)
- new changing attribute on dependencies indicate that the dependency artifacts may change even without revision change, but with only a new ivy file with new publication date
- new useRemoteConfig on conf tag in ivyconf.xml, tells to use remote configuration file for repository config
- new type filtering in cachepath task
- new cachefileset task: builds an ant fileset of artifacts in cache
- publish task now uses srcivypattern for ivy files finding and for delivery
- better debug and error messages (IVY-60 IVY-61)
- added a javadoc target in ant build (thanks to joshua nichols)

- FIX: module descriptors sort was failing in some case cases (fix by Karl Baum)
- FIX: Ivy complains about schema directive (IVY-64)
- FIX: 'null' status attribute in module descriptor (IVY-62)
- FIX: report header contains incorrect link after resolve for multiple, comma-separated configurations (IVY-57)
- FIX: error retrieving dependencies with a '+' in their revision if the ivy file doesn't exist - fixed by maarten coene (IVY-59)
- FIX: trying to resolve latest with no revision in pattern caused a StackOverflowError (IVY-56)
- FIX: now handle transitive eviction (IVY-51)
- FIX: resolve now store resolved file id in ivy variables, so that multiple resolve calls can be followed by multiple retrieve, each retrieve will use the last resolve info (IVY-49)
- FIX: IllegalStateException on retrieve done from command line
- FIX: checks ivy files data consistency with asked info (org, module name and revision)
- FIX: use AUTH configuration for configuration file
- IMPROVE: added publish handling from command line (IVY-48)

Downloads

ivy-1.2a-bin.zip (1028 kB)
ivy-1.2a-src.zip (776 kB)
ivy-1.2a-src-withdep.zip (1040 kB)

1.3 - 2006-03-17

Changes log

Ivy 1.3-RC3 has been promoted to 1.3 on 2006-03-17.

For known bugs and limitations please see http://jira.jayasoft.org/

For detailed list of changes since 1.2a, please see changes of the three release candidates below.

Downloads

ivy-1.3-bin.zip (1.52 MB)
ivy-1.3-src.zip (1.21 MB)
ivy-1.3-src-withdep.zip (1.59 MB)

1.3-RC1 - 2006-01-25

Changes log

compatiblity with previous version:
- the default place for the cache has changed, it is now in {USER_HOME}/.ivy/cache, instead of {USER_HOME}/.ivy-cache
please move this directory if you want to avoid unnecessary downloads
- modules are now logged as they are found, set ivy.log.module.when.found variable to false to avoid this

- NEW: namespace system: a resolver can be declared to belong to a namespace, which itself specify the transformation to apply to convert it from and to system namespace (IVY-147)
- NEW: pluggable module descriptor parsers let define new kind of module descriptor (IVY-146) (thanks to Maarten Coene)
- NEW: a new install task let add modules found in a repository in another one, even transitively (IVY-141)
- NEW: maven2 pom compatibility: most resolvers are now able to handle m2 pom as project metadata and there is a new convertpom task able to convert a pom file to an ivy file (IVY-140)
- NEW: include configurations from external file (IVY-88)
- NEW: a new default resolver which let override ivy files and artifacts found on public repository (ivyrep / ibiblio) and let publish modules in a local repository (IVY-132)
- NEW: ivyconf file inclusion in ivyconf files (IVY-99)
- NEW: macrodef feature in ivyconf for defining macro resolvers with parameters (IVY-98)
- NEW: conf fallback mechanism (IVY-145)
- NEW: exclusion now let exclude whole modules (IVY-144)
- NEW: ability to use a dependency instead of an ivy file in standalone mode (IVY-96)
- NEW: ability to output a path of dependencies in cache from the standalone mode (IVY-92)
- NEW: it is now possible to reference existing resolver in resolver containers (IVY-35)
- NEW: overwrite attribute in the publish task now let force overwrite of read only files (IVY-83)
- NEW: add a conflict manager ("strict") making build fail when a diamond conflict is found (thanks to Christer Jonsson) (IVY-118)

- IMPROVE: generate xml report using ivy:report task (IVY-143)
- IMPROVE: possibility to configure ivy so that special revisions are not queried as fixed one at all (IVY-139)
- IMPROVE: better url querying management (IVY-138) (thanks to Bernard Niset)
- IMPROVE: do not add resolver info in ivy files in cache so that they can be safely used as usual ivy files in a repository (IVY-137)
- IMPROVE: review default conf mapping management (IVY-134)
- IMPROVE: add possibility for a chain to behave like a dual chain (IVY-131)
- IMPROVE: add possibility to avoid overwrite of an ivy variable when setting them in ivyconf.xml (IVY-127)
- IMPROVE: ability to exclude the root project from the buildlist (thanks to Constantine Vetoshev) (IVY-124)
- IMPROVE: exclusion of artifacts now works on transitive artifacts, and exclusion can specify organisation and/or module (IVY-116)
- IMPROVE: now dynamic revisions replacement by deliver task can be turned off (IVY-120)
- IMPROVE: better performance with deep transitive dependencies
- IMPROVE: allow optional parts in the patterns (IVY-102) (thanks to Maarten Coene)
- IMPROVE: ability to define variable directly in ivyconf.xml (IVY-100)
- IMPROVE: ability to use no revision in pattern with latest.integration dependency, artifacts being updated according to revision change in ivy file (if checkmodified is set to true) (IVY-95)
- IMPROVE: ability to specify a root module in buildlist to filter out unnecessary build files (IVY-93) (thanks to Kristian Cibulskis)
- IMPROVE: import system properties as ivy variables in standalone mode
- IMPROVE: string identifying a module is now clearly different from a path
- IMPROVE: better error message when publish fails due to readonly destination (IVY-83)
- IMPROVE: some javadoc improvements (IVY-136 IVY-129) (thanks to Stephen Nesbitt)

- FIX: problem resolving dependencies when 2 module versions have different configurations (IVY-151)
- FIX: problem with inheritance between public and private conf (IVY-149)
- FIX: no variable replacement during the deliver step (IVY-133)
- FIX: conflict badly solved in some complex cases (IVY-130)
- FIX: mapping on conf * now only takes public configurations (IVY-126)
- FIX: bad dependency ivy files now causes failure (IVY-112)
- FIX: stack overflow error in contradictory conflict cases (IVY-117)
- FIX: publish now doesn't call deliver when not necessary (IVY-119)
- FIX: cachefileset was returning all artifacts for empty configuration (IVY-108)
- FIX: transitive and changing attribute were not copied in ivy files in cache (IVY-94)
- FIX: chain resolver now support latest strategy configuration (IVY-90)
- FIX: raise a clean error when a cyclic variable definition is found (IVY-75)
- FIX: clean ant project reference at the end of the build to improve usability in ide launching multiple builds in the same vm (like netbeans) (IVY-87 - IVY-115)
- FIX: ivy is now able to use simple ivy files in cache (doesn't need resolver info, use default one if no resolver is given) (IVY-86)
- FIX: private conf not accessible from other modules (IVY-76)
- FIX: root module configurations isolation bug fixed (IVY-84)
- FIX: changed the place where ivy stores master ivy files in cache to not overlap with dependencies one (IVY-85)
- FIX: bug in ResourceHelper didn't let override resource easily (IVY-80)
- FIX: throws a circular dependency exception when a circular dependency is found instead of failing silently (IVY-79)

Downloads

ivy-1.3-RC1-bin.zip (1.41 MB)
ivy-1.3-RC1-src.zip (1.15 MB)
ivy-1.3-RC1-src-withdep.zip (1.48 MB)

1.3-RC2 - 2006-02-15

Changes log

- IMPROVE: ivy now supports ${pom.version} in poms (IVY-174)
- IMPROVE: adds the possibility to disable concistency check (IVY-163)
- IMPROVE: add possibility to choose matcher on include exclude and conflict manager rules in ivy files, and on resolver per module in ivyconf (IVY-161)
- IMPROVE: add regexp management in the install ant task (IVY-154)

- FIX: httclient is not registered for https urls (IVY-171)
- FIX: post resolve tasks like retrieve or cachepath should be able to run from cache information (IVY-169)
- FIX: resolve fails without appropriate message when cache is empty and a module in the repository has no revision (IVY-165)
- FIX: resolve problem with configuration inheritance (IVY-164)
- FIX: some files in cache detected by not used by Ivy for subsequent retrieves (IVY-159)
- FIX: HTML report shouldn't display the dependencies of evicted modules (IVY-158) (thanks to Maarten Coene)
- FIX: bug when an organisation or module or revision contains a space (IVY-157)
- FIX: cos-nonambig warnings (IVY-156)

Downloads

ivy-1.3-RC2-bin.zip (1.53 MB)
ivy-1.3-RC2-src.zip (1.22 MB)
ivy-1.3-RC2-src-withdep.zip (1.60 MB)

1.3-RC3 - 2006-03-06

Changes log

- IMPROVE: Retrieve task now also optionally do ivy file downloads (IVY-167) (with the contribution of Costin Leau)

- FIX: ivy variable substitution in ivy files (IVY-186)
- FIX: force attribute is not treated as it should in some cases (IVY-182)
- FIX: problem reading 'invalid' POMs (IVY-153)
- FIX: cryptic NPE due to spelling error in ivy.xml (IVY-177)
- FIX: conflicts with dynamic revisions not resolved properly (IVY-181)
- FIX: incorrect configuration definition gives misleading NullPointerException (IVY-175)
- FIX: throw an error when using a non-existing conflict manager as default (IVY-179) (thanks to Maarten Coene)
- FIX: eviction problem with different conflicts in multiple confs (IVY-173)

Downloads

ivy-1.3-RC3-bin.zip (1.56 MB)
ivy-1.3-RC3-src.zip (1.26 MB)
ivy-1.3-RC3-src-withdep.zip (1.64 MB)

1.3.1 - 2006-03-30

Changes log

This version is bugfix release, upgrade from 1.3 is strongly recommended.
- FIX: retrieval of multiple artifacts in different configurations does not work as expected (IVY-188)
- FIX: configuration http url include doesn't work with commons http client (IVY-203)
- FIX: problem with conflict resolution in transitive dependencies (IVY-199)
- FIX: pb with force when it comes after a conflict which has already been solved (IVY-193)
- FIX: POM files that reference to the parent artifact download fails (IVY-195) (thanks to Tat Leung)
- FIX: M2 compatibility does not take into account the . replacement for publishing artifacts (IVY-191) (thanks to Peter Hayes)
- FIX: artifactproperty does not set the [conf] token in the pattern to the correct value. It is always set to 'default'. (IVY-123) (thanks to Peter Oxenham)

Downloads

ivy-1.3.1-bin.zip (1.57 MB)
ivy-1.3.1-src.zip (1.27 MB)
ivy-1.3.1-src-withdep.zip (1.65 MB)
ivy-doc-1.3.1.zip (1.6MB) (New! Easily browsable offline)
ivy-1.3.1.jar

Note: the zips distributed here before 2006-04-14 didn't include ivy.xml for ivy itself. This is now fixed, for those who want to get it you can find it here:
ivy-1.3.1.xml

1.4 - 2006-10-09

Changes log

Ivy 1.4-RC2 has been promoted to 1.4 on 2006-10-09

Known bugs and limitations:
- references in resolvers are not resolved 'in-time' with macrodef (IVY-319)
- latest. does not work properly when no matching revision exist (IVY-318)
- IVY complains about non-existent reports in the cache directory (IVY-315)
- retrieve fails when resolve is done with useOrigin set to true (IVY-304)

For detailed list of changes since 1.3.1, please see changes of the two release candidates detailed in child pages.
For an overview of what's new and noteworthy in this release since 1.3 see the new and noteworthy section below.

Downloads

ivy-1.4-bin.zip
ivy-1.4-src.zip
ivy-1.4-doc.zip

New and noteworthy

Documentation

A new introduction tutorial as simple as 1-2-3

It has never been so easy to try Ivy! You don't even need to install it yourself! Follow this simple steps and you're done:

  1. make sure you have ant 1.6.2 or greater and a jdk properly installed
  2. copy this build file in an empty directory on your local filesystem (and make sure you name it build.xml)
  3. open a console in this directory and run "ant". That's it!

If you have any trouble, check the FAQ, it may be related to your internet connection (proxy anyone?).
Want to try more tutorials? Check the tutorials page in the documentation.

Offline documentation greatly improved

The offline documentation has been greatly improved, and is now a real copy of the online documentation, with all the navigation between pages as on the online version. Continue to use the online version when you can to have the latest updated version with user comments.

Documentation update

As usual, the documentation has been extensively updated with to reflect the new features. Some are still missing, but we will finish the update before the 1.4 release.

Moreover, more examples have been added, more links between the pages, and some very useful pages have been added like the best practices one.

Core features

Extra attributes

Several tags in ivy xml files are now extensible with extra attributes.

The idea is very simple: if you need some more information to define your modules, you can add the attribute you want and you will then be able to access it as any other attribute in your patterns for example.

Example:
Here is an ivy file with the attribute 'color' set to blue:

<ivy-module version="1.4">
<info organisation="jayasoft"
      module="foo"
      color="blue"
      status="integration"
      revision="1.59"
/>
</ivy-module>

Then you can use the extra attribute when you declare a dependency on foo:

<dependency org="jayasoft" name="foo" color="blue" rev="1.5+" />

And you can define your repository pattern as:

${repository.dir}/[organisation]/[module]/[color]/[revision]/[artifact].[ext]

Note that in order to use extra attributes, you will need to disable ivy file validation, since your files won't fulffill anymore the official ivy xsd. See the configuration doc page to see how to disable validation.

Version matchers

Ivy now rely on a new concept to specify which version of a dependency should be used: pluggable version matchers.
This means that you can define your own way to match a dependency version.

Both latest.integration and latest sub version (1.3+ for instance) have been ported to this mechanism.

With this new feature Ivy also comes with two new built-in version matchers:

  • latest.[any status]
  • selects the latest revision of the dependency module with at least the specified status.

  • version ranges
  • You can now express your version contraint as a mathematical range.

Examples:

<dependency org="foo" name="bar" rev="latest.milestone" />

Will find the latest version of bar which is in milestone or release status.

<dependency org="foo" name="bar" rev="[1.0,2.0]" />

Matches any revision greater than 1.0 and lower than 2.0, inclusive.

URL attribute on artifact to improve ease of use

The artifact tag used when declaring a dependency now supports an url attribute. Even if this should be used only in very special cases (because it derrogates to the standard repository management), it can be useful, well, in very special cases :-)

Example:

<dependency org="foo" name="bar" rev="1.0">
  <artifact name="baz" type="jar" url="http://www.acme.com/repository/bar/baz-1.0-acme.jar"/>
</dependency>

Module configurations enhancements

Several improvements have been made on the module configurations:

  • It is now possible to disable transitivity for a whole configuration.

    Example:

    <conf name="compile" extends="core" transitive="false" visibility="private" />
  • You can use *, *(public) or *(private) as wildcards to extend a set of configurations.

    Example:

    <conf name="all" extends="*" />
  • You can use *, !A, !B in configurations mapping to mean all configurations but A and B.

    Example:

    <dependency name="commons-lang" rev="1.0" conf="*, !deploy->default" />

Events and triggers

Ivy now fires events all along the dependency resolution process, which can be listened and which can trigger events.

Example:

<triggers>
    <ant-build antfile="${ivy.conf.dir}/[module]/build.xml" target="publish"
          event="pre-resolve-dependency" filter="revision=latest.integration"/>
</triggers>

Triggers an ant build just before resolving a dependency with a latest.integration revision.

New Resolvers

vfs

The new vfs resolver leverages the work from apache commons vfs to give a uniform access to a set of different file systems including ftp, sftp, webdav, zip, ...

Example:

<vfs name="remote">
  <ivy pattern="webdav://username:password@host:8080/[organisation]/[module]/[revision]/ivy.xml" />
  <artifact pattern="webdav://username:password@host:8080/[organisation]/[module]/[revision]/[artifact].[ext]" />
</vfs>

ssh and sftp

The new ssh and sftp resolvers allow, as their name suggest, to access a repository using ssh or sftp. The secured nature of ssh and its wide spread implementation on most *nix servers makes these resolvers very good candidate in an enterprise environment.

Example:

<sftp name="secured" keyFile="path/to/key/file" keyFilePassword="${password}">
  <ivy pattern="sftp://user:xavier@yourserver.com:8022/path/to/repos/[module]/[revision]/ivy.xml"/>
  <artifact pattern="sftp://user:xavier@myserver.com:8022/path/to/my/repos/[artifact].[ext]"/>
</sftp>

Configuration files

Configurable statuses

The list of statuses available in module files is now configurable.

Example:

<statuses default="bronze">
  <status name="gold" integration="false"/>
  <status name="silver" integration="false"/>
  <status name="bronze" integration="true"/>
</statuses>

Per module settings

It is now possible possible to configure conflict-manager per module set.

Example:

<modules>
  <module organisation="jayasoft" name="ivy*" matcher="glob" conflict-manager="latest-time"/>
</modules>

Checksums

Ivy now allow to use checksums to verify the correctness of a downloaded file.

For the moment Ivy supports md5 and sha1 algorithm.

The configuration of using md5 and/or sha1 can be done globally or by dependency resolver.
Globally, use the ivy.checksums variable to list the check to be done (only md5 and sha1 are supported).
On each resolver you can use the checksums attribute to override the global setting.

The setting is a comma separated list of checksum algorithm to use.
During checking (at download time), the first checksum found is checked, and that's all. This means that if you have a "sha1, md5" setting, then if ivy finds a sha1 file, it will compare the downloaded file sha1 against this sha1, and if the comparison is ok, it will assume the file is ok. If no sha1 file is found, it will look for a md5 file. If none is found no checking is done.
During publish, all listed checksum algorithms are computed and uploaded.

By default checksum algorithms are "sha1, md5".

Fail when no module descriptor is found

By default when ivy doesn't find a module descriptor for a module, it lloks for an artifact, and if it finds one it assumes a default module descriptor.
It is now possible to configure this behaviour per resolver, by setting the allownomd attribute to false you can force the use of a module descriptor, and fail if none is found. This is also useful to improve performances on a resolver for which you know you will always have module descriptors.

System properties

All java system properties are now available as ivy variables in your configuration files.
Thus you can now easily define the default cache relative to user home (using ${user.home}), or access any specific property set via the standard java system property mechanism.

Changing pattern

You can now define a changingPattern and a changingMatcher to configure a set of revisions which should always be considered as changing one (artifacts are checked to see if they are up to date).

The pattern and the matcher name are attributes available on all built-in resolvers.

Example:

<filesystem name="local" changingPattern="*-SNAPSHOT" changingMatcher="glob">

will consider all modules with a revision ending by SNAPSHOT to be changing revisions.

Customisable classpath

You can now add jars to use to load plugins directly in ivy configuration, so that you can easily use your plugins in several execution environment (ant, standalone, IDE plugin, ...).

Example:

<ivyconf>
  <classpath file="${ivy.conf.dir}/custom-resolver.jar"/>
  <typedef name="custom" classname="fr.jayasoft.ivy.resolver.CustomResolver"/>
  <resolvers>
    <custom name="custom"/>
  </resolvers>
</ivyconf>

Ant tasks

repreport

A new repreport task allows to generate reports directly from your repository. The graph generation is the most interesting one, it can gives you a good overview of the dependencies between of all your modules available in your repository, or restrict this graph to just the modules from this organisation, and so on.

Example:

<ivy:repreport organisation="myorg" xml="false" graph="true" />
will generate a graphml of dependencies with all modules in the organisation "myorg"

artifactreport

A new artifactreport task has been introduced to easily generate an xml report with artifacts resolved, with useful information such as their original location. This report is particularly well suited for generating IDE classpaths (see also the links page for higher IDE integration via plugins).

The generated report looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<modules>
  <module organisation="hippo" name="sant-classes" rev="1.01.00b04-dev" status="integration">
    <artifact name="sant-classes-src" ext="zip" type="zip">
      <origin-location is-local="true">
        C:/home/jstuyts/data/ivy/local/hippo/sant-classes/1.01.00b04-dev/sant-classes-src-1.01.00b04-dev.zip</origin-location>
      <cache-location>
        C:/home/jstuyts/data/ivy/cache/hippo/sant-classes/zips/sant-classes-src-1.01.00b04-dev.zip</cache-location>
      <retrieve-location>lib/test/sant-classes-src-1.01.00b04-dev.zip</retrieve-location>
    </artifact>
  </module>
  <module organisation="testng" name="testng" rev="4.6.1-jdk15" status="release">
    <artifact name="testng" ext="jar" type="jar">
      <origin-location is-local="false">
        <a href="http://repository.hippocms.org/maven/testng/jars/testng-4.6.1-jdk15.jar</origin-location>" title="http://repository.hippocms.org/maven/testng/jars/testng-4.6.1-jdk15.jar</origin-location>">http://repository.hippocms.org/maven/testng/jars/testng-4.6.1-jdk15.jar<...</a>
      <cache-location>C:/home/jstuyts/data/ivy/cache/testng/testng/jars/testng-4.6.1-jdk15.jar</cache-location>
      <retrieve-location>lib/test/testng-4.6.1-jdk15.jar</retrieve-location>
    </artifact>
  </module>

info

The new info task eases the access to some essential data contained in an ivy file without performing a dependency resolution.

Example:

<ivy:info file="${basedir}/path/to/ivy.xml" />

listmodules

The new listmodules task let you list modules available in the repository and set ant properties accordingly.

Example:

<ivy:listmodules organisation="jayasoft" module="ivy" revision="*" property="ivy.[revision]" value=="found"/>

findrevision

This new task sets an ant property with the latest revision found for a given module matching a given revision constraint.

<ivy:findrevision organisation="jayasoft" module="ivy" revision="1.0+"/>

useOrigin

The resolve, cachepath, and retrieve tasks now supports a new useOrigin attribute, which allow to use the original location of local artifacts instead of their location in ivy cache. Used directly on a resolve or when no resolve has been done, it will avoid the copy of the artifact to the cache, and use directly the artifact from its original location.

<cachepath pathid="default.classpath" conf="default" useOrigin="true" />

Disable transitive dependencies on resolve

You can now disable transitive dependencies on resolve.

Example:

<ivy:resolve file="path/to/ivy.xml" transitive="false" />

Synchronization feature in retrieve

The retrieve task can now performs a real synchronization of the destination directory, instead of a simple copy.

Example:

<ivy:retrieve pattern="${lib.dir}/[conf]/[artifact].[ext]" sync="true" />

Standalone mode

Application launcher

Ivy can now be used as an application launcher:

java fr.jayasoft.ivy.Main -conf path/to/myivyconf.xml -dependency bar foo 2.0 -main org.bar.foo.FooMain

calls ivy with given ivyconf file and resolve bar foo 2.0, and then run org.foo.FooMain class with the resolved artifacts (foo 2.0 and its dependencies) as classpath

1.4-RC1 - 2006-09-17

Here are the release notes of version 1.4-RC1.
A new and noteworthy section is available on version 1.4 page.

You can download it here:

It includes 30 new features, 33 improvements and even more bug fixes since Ivy 1.3.1.

  version 1.4-RC1 - 2006-09-17
=================================
Incompatibility with previous versions:
---------------------------------------
* usage:
  - no known major incompatiblity
  - build list task now requires a configured ivy instance (configure will automatically be called if you don't call it explicitly)
  - publish now requires the published ivy file to have the published revision (automatic if you use deliver)
* API:
  - Numerous API changes especially in the BasicResolver class and subclasses due to the introduction of VersionMatcher,
  this may break some custom dependency resolvers or other tools or plugins depending directly on Ivy API
Changes:
--------
* thanks to Jayasoft:
  - NEW: ivy report generate full graph from automated build (IVY-155)
  - NEW: support for build number calculation (IVY-276)
  - NEW: find modules in repository (IVY-275)
  - NEW: explicitly specify artifact download URL (IVY-271)
  - NEW: introduce branch management (IVY-269)
  - NEW: resolve dependencies directly without using an ivy file (IVY-268)
  - NEW: ability to invoke any build scripts for dependencies (IVY-68)
  - NEW: support sftp repository (IVY-267)
  - NEW: pluggable version matcher (IVY-219)
  - NEW: support for version ranges (IVY-295)
  - NEW: dependency based on dependency status (IVY-47)
  - NEW: add possibility to define extra attributes in ivy files (IVY-217)
  - NEW: option to omit specific confs and allow the rest (IVY-66)
  - NEW: use custom classloader for plugins (IVY-220)
  - NEW: adding to SPECIAL_MEANINGS in LatestRevisionStrategy (IVY-121)
  - NEW: Allow use of system properties in ivyconf.xml (IVY-228)
  - IMPROVE: allow to use file-system repository directly without cache (IVY-211)
  - IMPROVE: deliver task use a default value for revision (IVY-252)
  - IMPROVE: better documentation distribution (IVY-274) - in progress
  - IMPROVE: define conflict manager per organisation/module in ivyconf (IVY-270)
  - IMPROVE: transitive parameter in resolve (IVY-21)
  - IMPROVE: add syncing feature in retrieve (IVY-33)
  - IMPROVE: use of md5 and/or sha1 files to check downloads (IVY-27)
  - IMPROVE: possible to use m2compatible without automatically using POMs as well (IVY-263)
  - IMPROVE: support for circular dependencies (IVY-202)
  - IMPROVE: make status list configurable (IVY-242)
  - IMPROVE: use only ivy patterns for listing revisions when module desciptor is required (allownomd = false) (IVY-166)
  - IMPROVE: implement strict haltonfailure if ivy.xml is not found (IVY-110)
  - IMPROVE: artifact's "name" attribute could be omitted (IVY-231)
  - IMPROVE: ivy standalone now return error status (IVY-152)
  - IMPROVE: log messages do not display most specfic resolver name (IVY-170)
  - IMPROVE: prints URL before downloading in verbose mode (IVY-257)
  - IMPROVE: incorrect value in status attribute causes silent failure (IVY-259)
  - IMPROVE: suport empty dependencies tag in an ivy file (IVY-281)
  - IMPROVE: isolate dependency resolution from artifact downloading (IVY-254)
  - IMPROVE: Pass artifact to repository when calling "put" (IVY-192)
  - IMPROVE: Do not publish ivy file with bad revision, and allow to force the deliver when calling publish task (IVY-245)
  - FIX: Problem with multiple artifact includes in transitive dependencies (IVY-283)
  - FIX: Endless recursion in report (IVY-284)
  - FIX: http url lister doesn't work when link text has spaces (IVY-282)
  - FIX: Incorrect ant log level (IVY-279)
  - FIX: Wrong resolution of dependencies if artifacts specified explicitly (IVY-261)
  - FIX: Multiple versions of dependencies appearing in retrieve (IVY-264)
  - FIX: Too many false CircularDependencyException errors thrown (IVY-230)
  - FIX: CircularDependencyException not always thrown (IVY-184)
  - FIX: NullPointer in BasicResolver (IVY-258)
  - FIX: Bad diagnostics message when no space left (IVY-250)
  - FIX: Maven2 POM support can find groupId from "parent" element (IVY-262)
  - FIX: Parent version is expected to be equal to the module version in POM (IVY-241)
  - FIX: problem with cache and returnFirst (IVY-207)
  - FIX: modules splitted across a chain are not handled correctly (IVY-206)
  - FIX: problem with conf extension and latest revisions (IVY-240)
  - FIX: The clean-cache target in /src/example/hello-ivy/build.xml file refers to ${user.home}/.ivy-cache instead of ${user.home}/.ivy/cache/ (IVY-265)
* thanks to Ivy Community:
  - NEW: SSH Resolver added and aligned with SFTP resolver (IVY-273) (thanks to Andreas Sahlbach)
  - NEW: ability to turn off transitivity at configuration level (IVY-103) (thanks to Karl Baum and Maarten Coene)
  - NEW: a conflict manager that is able to allow implementation changes but not api changes (1.2.x - OK), (1.x.x - Not OK) (IVY-223) (thanks to Anders Janmyr)
  - NEW: enhance standalone mode to execute java program by creating classloader of dependant jars from cache (IVY-210) (thanks to Peter Hayes)
  - NEW: addition of Vfs Resolver which uses Commons-Vfs to resolve files (IVY-128) (thanks to Glen Marchesani, Matt Inger and Stephen Nesbitt)
  - IMPROVE: use global properties in the recursive delivery (IVY-222) (with the contribution of Roshan Punnoose)
  - IMPROVE: better handling of authentication (thanks to Christian Riege)
  - FIX: Ant log messsages not embedded in task log (IVY-280) (thanks to Gilles Scokart)
  - FIX: Ivy fails when downloading from a server that supports NTLM authentication (IVY-213) (thanks to Damon Rand)
  - FIX: Delivered Ivy files with incomplete last line. (IVY-125) (thanks to Matthias Kilian)
  - FIX: the vfs resolver should not log passwords (IVY-292) (thanks to Antoine Levy-Lambert)
* thanks to Maarten Coene:
  - NEW: add failureproperty parameter to the resolve task (IVY-285)
  - NEW: Add type filtering to retrieve task (IVY-260)
  - NEW: Add selectors to the configuration mapping (IVY-253)
  - NEW: Add Ant task to retrieve information from an Ivy file without doing a resolve (IVY-255)
  - NEW: add option to cachepath task to create a path with local artifact paths (IVY-221)
  - NEW: allow extending configurations to override the mapping of their super configurations (IVY-218)
  - IMPROVE: Retain artifact filenames along the publish/resolve/retrieve process (IVY-54)
  - IMPROVE: report Ant-task doesn't process the reports in batch (IVY-247)
  - IMPROVE: make ReportOutputter pluggable and customizable (IVY-205)
  - IMPROVE: add wildcard support for extending configurations (IVY-235)
  - IMPROVE: add support for xslt parameters in the report task (IVY-227)
  - IMPROVE: comments now aren't lost when delivering ivy files (IVY-226)
  - IMPROVE: add sort of 'fallback'-mapping to the defaultconfmapping attribute (IVY-215)
  - IMPROVE: artifact origin is not included in the default report (IVY-251)
  - FIX: VFS Resolve fails when trying to resolve a + version (IVY-237)
  - FIX: report Ant-task doesn't use outputpattern for generating graphml reports (IVY-246)
  - FIX: report Ant-task doesn't call init() on the internal XSLTProcess (IVY-248)
  - FIX: value of confmappingoverride from imported configurations is lost when writing Ivy file (IVY-239)
  - FIX: including configurations doesn't import the confmappingoverride setting (IVY-238)
  - FIX: NullPointerException when the creation of Ivy file in cache fails (IVY-234)
  - FIX: Ivy file containing 2 different versions of the same module is not deliverd correctly (IVY-229)
  - FIX: ModuleRevisionId encode/decode doesn't work if revision is empty (IVY-233)
  - FIX: cachepath task should preserve the order of the dependencies (IVY-225)
  - FIX: specifying a defaultconfmapping adds dependencies of each unlisted configuration (IVY-214)
* thanks to Johan Stuyts:
  - NEW: always update artifacts when revision matches a regex pattern (IVY-189)
  - NEW: provide Ant task for generating report about artifacts depended upon (IVY-194)
  - IMPROVE: change default cache artifact pattern to handle missing extension (IVY-196)
* thanks to Karl Baum:
  - NEW: "this" symbol for configuration mappings (IVY-183)
  - IMPROVE: performances improved (IVY-187)

1.4-RC2 - 2006-09-27

Here are the release notes of version 1.4-RC2.
A new and noteworthy section is available on version 1.4 page.

You can download it here:

It includes only bug fixes since 1.4-RC1.

  version 1.4-RC2 - 2006-09-27
=====================================
- FIX: m2compatible flag is ignored for display of failed artifact searches (IVY-303)
- FIX: AntCallTriggerTest and AntBuildTriggerTest fail when run from ivy build.xml (IVY-310)
- FIX: Classloader problem with ant (IVY-311)
- FIX: Make resolve overview more compact (IVY-299)
- FIX: Could not write to "tmp:///webdav_tmp.c1" because it is read-only (IVY-312)

1.4.1 - 2006-11-09

Ivy 1.4.1 is mainly a bug fix version, upgrade from 1.4 is strongly recommended.

It has been released on 2006-11-09.

Downloads

ivy-1.4.1-bin.zip
ivy-1.4.1-src.zip
ivy-1.4.1-doc.zip

Changes log

- IMPROVE: ability to rebuild all dependent projects from a leaf (IVY-101)
- IMPROVE: Artifact pattern list attribute for the ivy:publish (IVY-113)
- IMPROVE: Measure code coverage (IVY-323)
- IMPROVE: add release target to build file (IVY-339)
- IMPROVE: Add a 'conf' parameter to the ivy 'publish' ant task (IVY-322) (thanks to Emmanuel Pellereau)

- FIX: retrieve fails when resolve is done with useOrigin set to true (IVY-304)
- FIX: IVY complains about non-existent reports in the cache directory (IVY-315)
- FIX: Typo in failureproperty attribute of Ant resolve task (IVY-327) (thanks to Jean-Baptiste Quenot)
- FIX: ivy:resolve useOrigin fails to behave correctly (IVY-332)
- FIX: ChainVersionMatcher doesn't handle IvyAware children version matchers (IVY-331)
- FIX: latest.<status> does not work properly when no matching revision exist (IVY-318)
- FIX: attribute name in macrodef is not handled as expected (IVY-319)
- FIX: confmappingoverride doesn't work for configurations extending from "*(public)" (IVY-326)