ant-ivy-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From John Sokel <jso...@grubhub.com>
Subject Publish Retrieve without incrementing versions
Date Mon, 23 Jan 2012 16:30:41 GMT
I have spent the entire weekend trying to make ivy work for me and ivy
seems to be fundamentally opposed to what I want to do.  A quick background:

- I have 5 different projects, with a varying level of dependencies (A,B
dep on C; B,C dep on D, all dep on E).
- I have 3 different builds going with our CI server: trunk, QA branch,
PROD branch
- At any time a developer can run one of these 3 active branches (or all
three)
- I want to publish each artifact with up to 3 versions: trunk, qa, prod.
 No number scheme desired.
  Example: A-trunk.jar A-qa.jar A-prod.jar, B-trunk.jar B-qa.jar
B-prod.jar, etc.
- I want the dependent projects to get the last built artifact that was
published.

I went through the tutorials, and played with the example projects, and I
cannot get this to work.  Basically the problem is that IVY seems to be
numeric version dependent, and will not retrieve the same version even
though a new artifact has been published.  Once the dependent artifact has
been resolved and retrieved, it is cached and will never be overwritten
unless the version changes.  Therefore the users of that artifact will
never get the latest instance.

I know the sample projects solve this by adding a unique build number, or a
timestamp based version, but this causes a tremendous amount of stale
artifacts to lie around.  Plus when resolved, it does not automatically
clean up older versions that were retrieved, so I would need to put clean
up tasks in all of my build files.   This is evident in the
depender/dependee example.  With every build/publish of dependee (say 3
times), depender will copy the latest dependee-n.jar into its lib directory
without cleaning up the old ones. So it is left with the following in the
lib dir:

$ cd /opt/apache-ivy-2.2.0/src/example/dependence/depender/lib
$ ls -l
-rw-r--r--  1 jsokel  staff  169763 Nov 22  2005 commons-lang-2.0.jar
-rw-r--r--  1 jsokel  staff    1511 Jan 22 16:02 dependee-1.jar
-rw-r--r--  1 jsokel  staff    1511 Jan 22 16:06 dependee-2.jar
-rw-r--r--  1 jsokel  staff    1511 Jan 22 16:07 dependee-3.jar


So for me:
- Old artifacts are completely irrelevant
- We build many times per day so I dont want all the old jars/wars piling
up in the local repo or the resolved lib dir
- I dont want to perform all these cleanup tasks (especially since I dont
necessarily know the past version numbers)
- I want resolve/retrieve to just get the latest instance if the publish
time changed.

Is this possible?  Various settings seem to imply this is possible, but in
all of my testing I could not get the cache to update without a version
number change.  I was about to change it to write directly into the cache,
rather than the local directory, but it seemed wrong since I was now making
the updates for ivy.

Thanks in advance for any help,

John

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message