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.
- 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.
ivy-1.4-bin.zip
ivy-1.4-src.zip
ivy-1.4-doc.zip
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:
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.
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.
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.
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.
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:
selects the latest revision of the dependency module with at least the specified status.
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.
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>
Several improvements have been made on the module configurations:
Example:
<conf name="compile" extends="core" transitive="false" visibility="private" />
*
, *(public)
or *(private)
as wildcards to extend a set of configurations.
Example:
<conf name="all" extends="*" />
*, !A, !B
in configurations mapping to mean all configurations but A and B.
Example:
<dependency name="commons-lang" rev="1.0" conf="*, !deploy->default" />
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.
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>
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>
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>
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>
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".
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.
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.
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.
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>
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"
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>
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" />
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"/>
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+"/>
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" />
You can now disable transitive dependencies on resolve.
Example:
<ivy:resolve file="path/to/ivy.xml" transitive="false" />
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" />
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
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)
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)