69 messages in org.codehaus.groovy.devRe: [groovy-dev] Building Groovy
FromSent OnAttachments
Russel WinderOct 6, 2008 4:36 am 
MingfaiOct 6, 2008 4:47 am 
Hans DockterOct 6, 2008 4:50 am 
Hans DockterOct 6, 2008 4:55 am 
Jochen TheodorouOct 6, 2008 4:56 am 
Guillaume LaforgeOct 6, 2008 7:17 am 
Hans DockterOct 6, 2008 7:51 am 
Russel WinderOct 6, 2008 7:59 am 
Guillaume LaforgeOct 6, 2008 8:19 am 
Guillaume LaforgeOct 6, 2008 8:25 am 
MingfaiOct 6, 2008 8:28 am 
Guillaume LaforgeOct 6, 2008 8:36 am 
Hans DockterOct 6, 2008 1:46 pm 
Guillaume LaforgeOct 6, 2008 1:54 pm 
Hans DockterOct 6, 2008 1:54 pm 
Jochen TheodorouOct 6, 2008 2:03 pm 
Guillaume LaforgeOct 6, 2008 2:09 pm 
Paul DuffyOct 6, 2008 7:06 pm 
Luke DaleyOct 6, 2008 8:47 pm 
Guillaume LaforgeOct 6, 2008 9:44 pm 
Russel WinderOct 6, 2008 11:25 pm 
Russel WinderOct 6, 2008 11:54 pm 
Russel WinderOct 7, 2008 12:03 am 
Jason DillonOct 7, 2008 12:23 am 
Russel WinderOct 7, 2008 12:24 am 
Guillaume LaforgeOct 7, 2008 12:30 am 
Hans DockterOct 7, 2008 12:35 am 
Jason DillonOct 7, 2008 12:35 am 
Hans DockterOct 7, 2008 12:36 am 
Jason DillonOct 7, 2008 12:41 am 
Guillaume LaforgeOct 7, 2008 12:54 am 
Jason DillonOct 7, 2008 1:40 am 
Guillaume LaforgeOct 7, 2008 1:50 am 
Jason DillonOct 7, 2008 1:55 am 
Guillaume LaforgeOct 7, 2008 2:25 am 
Guillaume LaforgeOct 7, 2008 2:35 am 
Jason DillonOct 7, 2008 3:09 am 
Guillaume LaforgeOct 7, 2008 3:12 am 
Russel WinderOct 7, 2008 3:17 am 
Jason DillonOct 7, 2008 3:24 am 
Paul KingOct 7, 2008 4:04 am 
ma...@dockter.bizOct 7, 2008 4:19 am 
ma...@dockter.bizOct 7, 2008 4:25 am 
Jason DillonOct 7, 2008 4:36 am 
Jason DillonOct 7, 2008 4:39 am 
Jochen TheodorouOct 7, 2008 5:20 am 
Jason DillonOct 7, 2008 8:19 am 
Jochen TheodorouOct 7, 2008 9:51 am 
Jason DillonOct 7, 2008 10:49 am 
Jochen TheodorouOct 7, 2008 12:03 pm 
Hans DockterOct 7, 2008 2:34 pm 
Luke DaleyOct 7, 2008 3:52 pm 
Jason DillonOct 8, 2008 1:28 am 
Jason DillonOct 8, 2008 1:35 am 
Hans DockterOct 8, 2008 3:11 am 
Hans DockterOct 8, 2008 3:49 am 
Hans DockterOct 8, 2008 4:30 am 
Hans DockterOct 8, 2008 4:40 am 
Jason DillonOct 8, 2008 4:52 am 
Jason DillonOct 8, 2008 5:21 am 
Jochen TheodorouOct 8, 2008 6:23 am 
Jochen TheodorouOct 8, 2008 6:47 am 
Jochen TheodorouOct 8, 2008 6:59 am 
Hans DockterOct 8, 2008 8:33 am 
Hans DockterOct 8, 2008 8:43 am 
Paul DuffyOct 9, 2008 8:58 am 
Paul KingOct 9, 2008 1:15 pm 
Danno FerrinOct 9, 2008 1:27 pm 
Paul KingOct 10, 2008 2:31 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [groovy-dev] Building GroovyActions...
From:Hans Dockter (ma@dockter.biz)
Date:Oct 8, 2008 3:11:01 am
List:org.codehaus.groovy.dev

Hi Jason,

On Oct 7, 2008, at 10:55 AM, Jason Dillon wrote:

<snip>

Kudos for Maven for introducing the concept of build-by-convention long before it was made popular by rails-like frameworks. If it wouldn't have been for Jelly, the Maven people might have sticked with their Maven 1 approach which I definitely prefer to what they provide with Maven2.

Um, I don't think so... Jelly wasn't really the problem with Maven1, it was its entire concept of what a plugin is, how you configure plugins and how they get executed. Jelly just didn't help the problem at all.

Really? Jelly was a buggy unmaintained scripting language. This was at the base of Maven1 and this was a dramatic problem. I remember the Maven guys saying for Maven 2 something like: 'We don't even start to _think_ about supporting Groovy unless there is a 1.0 release'. For those who don't know this: This was owned to the fact that James has been the creator of both, Groovy and Jelly.

- It has the same problem as Ant regarding the anemic interaction with Java/Groovy (Maven considers this as a feature). The GMaven plugin does not make a difference here. You can't use Groovy to choreograph the build.

GMaven is not intended to choreograph anything, the dancing bits are already handled by the Maven reactor. GMaven just puts a little move groove into the dance.

That is what I'm saying.

- Maven enforces an often bizarre level of indirection (has anybody ever used the Maven constraint plugin to express the most simple custom constraint). Maven's verbosity is extreme.

"Maven constraint plugin"? What is that?

I mean the http://maven.apache.org/plugins/maven-enforcer-plugin/

- Maven's dependency management is far inferior to Ivy.

Pudding please?

This is an easy one:

See my work in progress document: http://docs.codehaus.org/download/ attachments/74383419/mavenDependencies.pdf

Also have a look at: http://ant.apache.org/ivy/m2comparison.html

Beside the many issues mentioned and shown in the documents above, the list is much longer. Ivy provides transaction policies for you caches. You can have as many caches as you want. You can define arbitrary patterns for repository layout. You can use regular expressions for inclusions, etc ...

I have worked with both, Maven and Ivy, intensely. I can only say it again: Ivy is light years ahead of Maven in regard to dependency management. Maven's dependency management is not very powerful, inflexible and conceptually flawed.

- Maven also introduces its own general purpose elements which are not necessarily implemented well (e.g. pom inheritance). (Have you ever tried to use a single property as a version value for all subprojects in a slightly complex multi-project build)

Yes I have.

I had a multi-project build which had not one single inheritance chain. It was impossible for me to achieve this. I have tried to use project specific properties in a profiles.xml (which I have stored in the root project folder) which also did not work out. The only solution I have found with projects that had a similar scenario was to use XML Entity Inclusion. I had no time yet to set up a sample project for this. But I doubt that you would find a solution.

- Maven is not based on dependency based programming. What it offers instead to hook in actions is significantly more inflexible.

I assume you mean phases instead of actions?

I mean actions in the general sense of the word. This is about comparing build systems. So I don't want to use Maven terminology for this.

In Maven terminology I don't mean phases. I mean hooking plugin goals into phases.

You know that the lifecycle phases for a build are completely configurable?

LOL

You can't for example even configure that during the deploy phase the war plugin (which is associated with this phase by default) should _not_ deploy anything. At least you can't do this on a per project level, which is usually what is needed. And for example the default lifecycle phases are also always executed first by definition.

And that goal execution can depend on other goal executions right (via the @execute annotation)?

And how can you configure as a build-user such things on a per build basis? You can hook in goals to phases as a flat ordered list. That's it. This is far inferior to having an arbitrary deep acyclic graph of actions (generally speaking).

- Its multi-project build features are inferior to what Gradle offers. For example: -- You can't do partial builds. In Gradle you can build a subproject in a way that all the project it depends on are rebuild as well. In Maven you always have to trigger the complete build (and if this takes some time you have to watch the console to push Ctrl-C when the stuff you want to have rebuild is done).

This is not exactly true.

It is true for the use case I have provided.

First you can always create profiles to control the set of modules which will be built.

I have done this with Maven. This is nice if you have one mulit- project build and want to use it to produce different distributions which require different subprojects. But this is no solution to the problem I have described, as you probably will know.

Second you can use the maven-reactor-plugin to get even more control over how things build:

http://maven.apache.org/plugins/maven-reactor-plugin/

I can't see how this solves the the use case from above. Could you give more details?

Pudding please? I know of a lot of stuff that lives inside of Maven, not happy with some of it sure, but if you are going to make a statement like this it would really help your point if you at least listed some of the frameworks and why you think they are a sickness ;-)

Have a look at my comments above regarding the Maven lifecycle. This point is not about the good or bad qualitiy of certain aspects of Maven. This is about the general approach of Maven. Maven is a big framework. A Maven user can only move within this framework. But the build space is complex and the users have many requirements which can't be anticipated by the developers, however smart they are. In such cases any framework turns into an obstacle or prison. Gradle is _not_ a framework. It has a language for dependency based programming at its base and highly configurable frameworks can be plugged in. But you can always fall back to utmost flexibility. I have seen that this issue is discussed between you and Jochen in some other postings in this thread. So I will write more about it there.

- Hans