Hi Michael,

On Dec 28, 2011, at 1:43 PM, Michael Guymon wrote:

> 
> So I have slowly being making progress on a dependency manager for buildr and 
> have put together a very simple implementation based on Bundler using Aether 
> for the transitive resolution. I would love some feed back on what I have 
> pieced together so far.
> 
> https://github.com/mguymon/lockjar
> 
> A Jarfile is used to specify the repos and dependencies, an example:
> 
> repository 'http://repository.jboss.org/nexus/content/groups/public-jboss'
> jar "com.slackworks:model-citizen:0.1"
> jar "org.apache.mina:mina-core:2.0.4" do exclude "com.package", 
> "com.another.package:blah:7" end
> 
> Would produce a Jarfile.lock with absolute paths to the local jars, an 
> example:
> 
> ---
> 
> dependencies:
>  com.slackworks:model-citizen:0.1: 
> /home/zinger/devel/projects/swx/lockjar/tmp/test-repo/com/slackworks/model-citizen/0.1/model-citizen-0.1.jar
>  org.apache.mina:mina-core:jar:2.0.4: 
> /home/zinger/devel/projects/swx/lockjar/tmp/test-repo/org/apache/mina/mina-core/2.0.4/mina-core-2.0.4.jar
>  org.slf4j:slf4j-api:jar:1.6.1: 
> /home/zinger/devel/projects/swx/lockjar/tmp/test-repo/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar
> 
> repositories:
>  - http://repository.jboss.org/nexus/content/groups/public-jboss
> 
> 
> The Jarfile.lock is standard yaml, not sure if a custom dsl is needed. 
> Similar to bundler, the Jarfile.lock has to be generated before getting 
> access to the dependencies. Once the Jarfile.lock is generated, Buildr can 
> reuse it instead of checking for transitive dependencies every time.

This is a very interesting idea. Might I suggest, though, that you have the 
lockfile contain just the list of dependent artifacts? That way you could check 
it in and use it to ensure that all developers/CI/etc. are using the same 
artifact versions. Converting from a buildr artifact name to the local path is 
not an expensive operation.

Rhett

> 
> Next step is moving the project towards something that integrates nicely with 
> Buildr. Maybe allow the Jarfile to be defined directly in the buildfile?
> 
> thanks,
> Michael
> 
> On 11/04/2011 06:13 AM, Peter Tillotson wrote:
>> This sounds pretty good - some thoughts inline below
>> 
>>> Dependency Resolution
>>> 
>>> * Dependency resolution is optional
>>> * Resolve Transitive Dependencies for an artifact(s)
>>> * Create/Rebuild a dependency file
>>> * Lock dependencies based on the dependency file
>> 
>> Transitive resolution should be capable of producing the same dependencies 
>> as maven ( possibly via an interface compatible plugin ) and support the 
>> full maven spec.
>> 
>> I'd add  filtering and blacklist has been useful as well. I always have to 
>> package(:war).libs.reject! { |lib| lib.group == 'servlet-api' } this is a 
>> reasonable compile dependency that shouldn't get into runtime. If the 
>> dependencies file something like the following
>> 
>> runtime:
>>    - org.apache.cassandra:cassalndra-all:1.0.1
>>        exclude:
>>    - *:servlet-api:*
>>    - *:junit:*
>> 
>> That would be pretty handy - I really like the idea of the dependency report 
>> effectively acting as the whitelist / blacklist so when the universe changes 
>> my build file doesn't necessarily have to :-)
>> 
>>> Maven interop
>>> 
>>> * Generate a maven POM based on a Buildr project
>>> * Create&  deploy maven friendly artifacts based on a Buildr project
>>> 
>>> Would there be any benefit for having Ivy interoperability as well?
>> 
>> p 
>> 
>> ________________________________
>> From: Michael Guymon<michael.guy...@gmail.com>
>> To: dev@buildr.apache.org
>> Sent: Thursday, 3 November 2011, 23:16
>> Subject: Re: Experiences with transitive dependencies in buildr
>> 
>> 
>> So based on the discussion, it sounds like the following solutions would 
>> work well:
>> 
>> Dependency Resolution
>> 
>> * Dependency resolution is optional
>> * Resolve Transitive Dependencies for an artifact(s)
>> * Create/Rebuild a dependency file
>> * Lock dependencies based on the dependency file
>> 
>> Maven interop
>> 
>> * Generate a maven POM based on a Buildr project
>> * Create&  deploy maven friendly artifacts based on a Buildr project
>> 
>> Would there be any benefit for having Ivy interoperability as well?
>> 
>> On 11/02/2011 09:59 PM, Peter Donald wrote:
>>> Hi,
>>> 
>>> On Thu, Nov 3, 2011 at 12:26 AM, Chiaming Hsu<camy...@yahoo.com>   wrote:
>>>> If this becomes part of the core of buildr as Peter suggested, would there 
>>>> be performance impact when not using transitive dependencies?
>>> I would hope not.
>>> 
>>> I am not a huge fan of transitive closure across the builds when you
>>> can't lock it down to a specific set (like Gemfile.lock or what Ivy4r
>>> supports it seems). I don't object so much to the network chattiness
>>> but due to the un-reproducible of builds.
>>> 
>>> Aether would mainly used as the API for interacting with Maven repos
>>> and for implementing transitive dependencies of maven artifacts.
>>> 
>>> 
> 

Reply via email to