Wow, this could do it.  Did this make it in 2.4-rc1?

Gary

<div>-------- Original message --------</div><div>From: Nicolas Lalevée 
<nicolas.lale...@hibnet.org> </div><div>Date:04/26/2014  12:55  (GMT-05:00) 
</div><div>To: ivy-user@ant.apache.org </div><div>Subject: Re: How do I add all 
jars in a zip as dependencies? </div><div>
</div>Maybe you can use a trick. In OSGi, a bundle can be considered as a zip 
of jars to be added to the classpath. And Ivy-Ant & IvyDE are supporting it 
(both trunk version though).

A such OSGi bundle needs in its MANIFEST.MF to have an entry 'Bundle-Classpath' 
listing all the paths to the inner jars. So your zip of jar should contain a 
META-INF/MANIFEST.MF with a such entry.

To tell Ivy that the artifact should be processed after download, you should 
use the "packaging" feature [1]. The ivy.xml of your zip of jars should 
contains the artifact declaration:
<artifact name="my-zip-of-jars" type="jar" ext="zip" packaging="zip" />

Then we must computed the exploded classpath with the OSGI trick.

For Ant, you should use the cachepath task with the attribute osgi to true 
(this is not documented, I forgot it).
<cachepath pathid="classpath" conf="default" osgi="true" />

For IvyDE, you should then enable the "Read OSGi metadata" option on the 
classpath container [2].

This feature is very new (trunk only), so there may be some bugs. You're more 
than welcomed to report them.

Nicolas

[1] http://ant.apache.org/ivy/history/trunk/concept.html#packaging
[2] http://ant.apache.org/ivy/ivyde/history/trunk/preferences.html#classpath

Le 25 avr. 2014 à 23:27, Gary Gregory <garydgreg...@gmail.com> a écrit :

> Thank you all for your replies.
> 
> It seems that for all the avenues proposed, I'd have to end up writing an
> ivy.xml file, _which is what I want to avoid_. Even if I did that
> programmatically, what would it contain based on a directory full of jars?
> 
> Could I just make up dummy org names and module names, since there's not
> going to be OSGi type of info in most of these jars files. I guess not
> since I'd have to give the file back to Ivy for by calling  ivy:resolve.
> 
> What I want is <ivy:resolveJars dir="..." pattern="*.jar" conf="..."/> but
> that does not exist :(
> 
> At the end of the day I want the jars on a classpath in IvyDE and Ant.
> 
> In Ant I can do the above easily "make a cp from all the jars over here",
> but in IvyDE? I guess I'll have to add them all to the .classpath file, not
> great...
> 
> Am I missing something?
> 
> Gary
> 
> 
> On Fri, Apr 25, 2014 at 3:34 PM, Zac Jacobson <pie....@gmail.com> wrote:
> 
>> I don't know an approach to generate the dependencies lines at build time.
>> I think you'd have to by-script or by-hand create the dependency lines in
>> an ivy file somewhere.
>> 
>> For a package resolver, when you're defining the package you would also
>> define an ivy.xml file with dependencies for each conf in that package.
>> Then from your project, you would depend only on your teiid package, and
>> let ivy cascade through the dependencies as usual. This would be an
>> advantage if you are depending on teiid from multiple projects, you would
>> only need to manage those dependencies in one place.
>> 
>> Regardless of where you do this, if there's dependencies in teiid that
>> match existing libraries (but named slightly differently) in your primary
>> repository, then you can tweak your ivy file to match the module names that
>> you're familiar with so you don't get duplicate classes in different jars
>> on your classpath. As an aside: I believe this is a large part of the
>> motivation behind the ivy roundup project.
>> 
>> Ivy roundup source is available for checkout. I did a quick search around
>> in there: have a look at the org.glassfish.jersey module package for an
>> example of a larger project with lots of configurations and dependencies.
>> 
>> https://code.google.com/p/ivyroundup/
>> 
>> Good luck!
>> Zac
>> 
>> 
>> On Fri, Apr 25, 2014 at 12:00 PM, Gary Gregory <garydgreg...@gmail.com
>>> wrote:
>> 
>>> Hm... so the package resolver sounds like a nice way to cache downloaded
>>> zips and unzip the contents into the ivy cache in one step (albeit a
>> heavy
>>> step, which is fine.)
>>> 
>>> But... how does this address the meat of my problem: I want all the jars
>> in
>>> the zip to end up as dependencies for my conf such that my project can be
>>> built with Ant and Eclipse IvyDE.
>>> 
>>> If I have to list all 102 dependencies one at a time in dependency
>>> elements, then I do not need all of this unzipping and I can do it the
>>> 'classic' way... arg.
>>> 
>>> Thoughts?
>>> 
>>> Gary
>>> 
>>> 
>>> On Fri, Apr 25, 2014 at 11:27 AM, <pie....@gmail.com> wrote:
>>> 
>>>> Could you use the package resolver to fetch the dependency in a way
>> that
>>>> you don't have to do any explicit manipulations after you have the
>>>> artifacts?
>>>> 
>>>> ‎
>>> 
>> http://ant.apache.org/ivy/history/latest-milestone/resolver/packager.html
>>>> 
>>>> It would take some effort to define the package config.
>>>> 
>>>> 
>>>>  Original Message
>>>> From: Gary Gregory
>>>> Sent: Friday, April 25, 2014 07:49
>>>> To: ivy-user@ant.apache.org
>>>> Reply To: ivy-user@ant.apache.org
>>>> Subject: How do I add all jars in a zip as dependencies?
>>>> 
>>>> Hi All:
>>>> 
>>>> I am working on a project to embed Teiid (FOSS project from JBoss) in
>> our
>>>> application. The embedded zip file for this project contains 103 jars
>>>> scattered in many directories. Adding the top level jars from this
>>> project
>>>> through the dependency element with 'transitive' set to truedoes not
>> work
>>>> because some dependencies fail because some modules include variables
>>> like
>>>> "org.apache.accumulo#accumulo-core;${version.accumulo}"
>>>> 
>>>> So instead I've created a trigger like this:
>>>> 
>>>> <triggers>
>>>> <ant-call target="teiid-unzip" prefix="teiid-unzip"
>>>> event="post-download-artifact" filter="organization=org.jboss.teiid AND
>>>> module=teiid AND revision=${teiid.version} AND type=zip AND
>>>> status=successful"/>
>>>> </triggers>
>>>> 
>>>> To unzip the file locally. Next up: how do I add all the jars as
>>>> dependencies? Is there a *.jar kind of call I can make/configure?
>>>> 
>>>> Thank you,
>>>> Gary
>>>> 
>>>> --
>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
>>>> Java Persistence with Hibernate, Second Edition<
>>>> http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
>>> Java Persistence with Hibernate, Second Edition<
>>> http://www.manning.com/bauer3/>
>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>> Spring Batch in Action <http://www.manning.com/templier/>
>>> Blog: http://garygregory.wordpress.com
>>> Home: http://garygregory.com/
>>> Tweet! http://twitter.com/GaryGregory
>>> 
>> 
> 
> 
> 
> -- 
> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
> Java Persistence with Hibernate, Second 
> Edition<http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory

Reply via email to