Le 26 avr. 2014 à 22:29, Gary Gregory <[email protected]> a écrit :

> The zip I am dealing with has no manifest of course. So I would need to make 
> a copy of the zip and add a manifest in the build. I would do that in a 
> trigger I think. Will ivy be able to find a zip I create as a sibling of the 
> original one?

Probably not.

Maybe you could implement your own "packaging", which will unzip after 
download, like the default one, but could also generate that required MANIFEST 
file.

Packaging like many features in Ivy has been implemented as a plugin. You can 
implement one, add it to the classpath [1], declare it [2], and use it in your 
ivysettings (just add an xml element with the chosen name, it will 
automatically registered within Ivy).

About the implementation, see ZipPacking [3].

Nicolas

[1] http://ant.apache.org/ivy/history/latest-milestone/settings/classpath.html
[2] http://ant.apache.org/ivy/history/latest-milestone/settings/typedef.html
[3] 
http://svn.apache.org/repos/asf/ant/ivy/core/trunk/src/java/org/apache/ivy/core/pack/ZipPacking.java


> 
> Gary
> 
> <div>-------- Original message --------</div><div>From: Nicolas Lalevée 
> <[email protected]> </div><div>Date:04/26/2014  12:55  (GMT-05:00) 
> </div><div>To: [email protected] </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 <[email protected]> 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 <[email protected]> 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 <[email protected]
>>>> 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, <[email protected]> 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: [email protected]
>>>>> Reply To: [email protected]
>>>>> 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: [email protected] | [email protected]
>>>>> 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: [email protected] | [email protected]
>>>> 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: [email protected] | [email protected]
>> 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