buildr-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matteo Vaccari <vacc...@pobox.com>
Subject Re: Problems with dependent projects
Date Mon, 01 Aug 2011 17:50:27 GMT
On Mon, Aug 1, 2011 at 7:45 PM, Alex Boisvert <alex.boisvert@gmail.com> wrote:
> On Mon, Aug 1, 2011 at 9:30 AM, Matteo Vaccari <vaccari@pobox.com> wrote:
>
>> On Mon, Aug 1, 2011 at 4:58 PM, Matteo Vaccari <vaccari@pobox.com> wrote:
>> >
>> > Hi,
>> > I'm new to Buildr; I'd really want to use it for my project, but I'm
>> running into a couple of problems with dependent projects, and I would be
>> very grateful if you could lend me a hand.
>> > It boils down to this: if you have a simple setup like
>> > define 'problematic', :version => '0.0' do
>> >   define 'foo' do
>> >     package :jar
>> >   end
>> >
>> >   define 'bar' do
>> >     compile.with project('foo')
>> >   end
>> > end
>> > where both projects are Java project.
>> > Problem one: it will only work if project 'foo' is packaged as a jar.  Is
>> there a way to make it work when 'foo' is packaged as a war?  Because when
>> you package 'foo' as a war, the compile task for 'bar' fails.
>> > Problem two: suppose project 'bar's test classes need to be compiled with
>> project 'foo's test classes.  I see in the wiki there's a suggested
>> workaround
>> > define "A" do
>> >   package(:jar)
>> > end
>> > define "B" do
>> >   compile.with project("A")
>> >   test.with project("A").test.compile.target  # <---- HERE
>> >   package(:jar)
>> > end
>> > This works for the compile task, but it breaks the eclipse task.  It
>> turns out that the generated .classpath contains an entry like
>> >   <classpathentry
>> path="/Users/matteo/work/problematic/foo/target/test/classes" kind="src"
>> excluding="**/.svn/|**/CVS/"/>
>> > that does not work in Eclipse.
>> > What can I do?
>>
>> OK, I found a sort-of solution for both problems:
>>
>> define 'problematic' do
>>   define 'foo' do
>>     package :war
>>   end
>>
>>   define 'bar' do
>>     foo_src = project('foo').compile.target
>>     foo_test = project('foo').test.compile.target
>>     compile.with project('foo'), foo_src, foo_test
>>     eclipse.exclude_libs += [foo_src, foo_test]
>>   end
>> end
>>
>> The first entry in compile.with is used by the eclipse task, to set up
>> the correct dependency on 'foo'.  The other two are used by the
>> compile task.  The eclipse.exclude_libs fixes the incorrect entries in
>> .classpath.
>>
>
> I think that's the right way to do things... except for the eclipse
> exclusions -- those should be properly handled by the eclipse task.  Please
> file a bug.

My feeling is that it should work like this:

> define 'problematic' do
>   define 'foo' do
>     package :war
>   end
>
>   define 'bar' do
>     compile.with project('foo')
>   end
> end

This works OK in eclipse, as it lets bar use both src and test from
foo.  It fails in compilation though.  I would say that the problem is
in the compile task.

Matteo

Mime
View raw message