buildr-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jean-Philippe Caruana <>
Subject transitive dependancies for my projects only
Date Fri, 07 May 2010 12:01:06 GMT

I would like to use transitive dependancies in buildr but only for my 
projects and not for external libs, so  compile.with 
transitive('org.apache.wicket:wicket:jar:1.4-rc6') is not what i'm 
looking for (1.4-rc6, what a cool version name !)

If I have to projects A & B with B depending from A. B is a war, so I 
need to have all dependancies needed by A, otherwise I'll have a 
NoClassDefFoundError in runtime

define 'myProject' do
	define 'A' do
		compile.with DEP_A_1, DEP_A_2, DEP_A_3
		package :jar
	define 'B' do
		compile.with project('A'), DEP_A_1, DEP_A_2, DEP_A_3
		compile.with DEP_B_1, DEP_B_2
		package :war

I know I can write
compile.with project('A'), project('A').compile.dependancies
but I find it quite verbose and not very convinient when there are not 1 
but 7 projects or more. I have 60 modules in my project and there are a 
lot of duplications.

I would like to write it that way :

define 'myProject' do
	define 'A' do
		compile.with DEP_A_1, DEP_A_2, DEP_A_3
		package :jar
	define 'B' do
		compile.with transitive(project('A'))
		compile.with DEP_B_1, DEP_B_2
		package :war

and even better "compile.with transitive(projects('A', 'other'))"

this didn't work (under buildr 1.3.5)

Buildr aborted!
undefined method `invoke' for nil:NilClass
/var/lib/gems/1.8/gems/buildr-1.3.5/lib/buildr/core/application.rb:400:in `raw_load_buildfile'
/var/lib/gems/1.8/gems/buildr-1.3.5/lib/buildr/core/application.rb:218:in `load_buildfile'
/var/lib/gems/1.8/gems/buildr-1.3.5/lib/buildr/core/application.rb:213:in `load_buildfile'

despite inside artifact/package.rb there is a "when Project" in the 
transitive method

   def transitive(*specs)
     specs.flatten.inject([]) do |set, spec|
       case spec
       when /([^:]+:){2,4}/ # A spec as opposed to a file name.
         artifact = artifact(spec)
         set |= [artifact] unless artifact.type == :pom
         set |= POM.load(artifact.pom) { |spec| 
artifact(spec) }
       when Hash
         set |= [transitive(spec)]
       when String # Must always expand path.
         set |= transitive(file(File.expand_path(spec)))
       when Project
         set |=  transitive(spec.packages) 

       when Rake::Task
         set |= spec.respond_to?(:to_spec) ? transitive(spec.to_spec) : 
       when Struct
         set |= transitive(spec.values)
         fail "Invalid artifact specification in: #{specs.to_s}"

I know I could write some my_transitive method, but I would imagine this 
could be done in buildr right away. Is there any way to do this ?


-- Jean-Philippe Caruana
Ce message et toutes les pieces jointes (ci-apres le "message") sont
confidentiels et etablis a l'attention exclusive de ses destinataires.
Toute utilisation ou diffusion non autorisee est interdite.
Tout message electronique est susceptible d'alteration. Multimedia Business Services decline
toute responsabilite au titre de ce message s'il a ete altere, deforme
ou falsifie.
Si vous n'etes pas destinataire de ce message, merci de le detruire
immediatement et d'avertir l'expediteur.
This message and any attachments (the "message") are confidential and
intended solely for the addressees. Any unauthorised use or
dissemination is prohibited.
Messages are susceptible to alteration. Multimedia Business Services shall not be liable for
message if altered, changed or falsified.
If you are not the intended addressee of this message, please cancel it
immediately and inform the sender..

View raw message