

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
69 messages in org.codehaus.groovy.devRe: [groovy-dev] Building Groovy| From | Sent On | Attachments |
|---|---|---|
| Russel Winder | Oct 6, 2008 4:36 am | |
| Mingfai | Oct 6, 2008 4:47 am | |
| Hans Dockter | Oct 6, 2008 4:50 am | |
| Hans Dockter | Oct 6, 2008 4:55 am | |
| Jochen Theodorou | Oct 6, 2008 4:56 am | |
| Guillaume Laforge | Oct 6, 2008 7:17 am | |
| Hans Dockter | Oct 6, 2008 7:51 am | |
| Russel Winder | Oct 6, 2008 7:59 am | |
| Guillaume Laforge | Oct 6, 2008 8:19 am | |
| Guillaume Laforge | Oct 6, 2008 8:25 am | |
| Mingfai | Oct 6, 2008 8:28 am | |
| Guillaume Laforge | Oct 6, 2008 8:36 am | |
| Hans Dockter | Oct 6, 2008 1:46 pm | |
| Guillaume Laforge | Oct 6, 2008 1:54 pm | |
| Hans Dockter | Oct 6, 2008 1:54 pm | |
| Jochen Theodorou | Oct 6, 2008 2:03 pm | |
| Guillaume Laforge | Oct 6, 2008 2:09 pm | |
| Paul Duffy | Oct 6, 2008 7:06 pm | |
| Luke Daley | Oct 6, 2008 8:47 pm | |
| Guillaume Laforge | Oct 6, 2008 9:44 pm | |
| Russel Winder | Oct 6, 2008 11:25 pm | |
| Russel Winder | Oct 6, 2008 11:54 pm | |
| Russel Winder | Oct 7, 2008 12:03 am | |
| Jason Dillon | Oct 7, 2008 12:23 am | |
| Russel Winder | Oct 7, 2008 12:24 am | |
| Guillaume Laforge | Oct 7, 2008 12:30 am | |
| Hans Dockter | Oct 7, 2008 12:35 am | |
| Jason Dillon | Oct 7, 2008 12:35 am | |
| Hans Dockter | Oct 7, 2008 12:36 am | |
| Jason Dillon | Oct 7, 2008 12:41 am | |
| Guillaume Laforge | Oct 7, 2008 12:54 am | |
| Jason Dillon | Oct 7, 2008 1:40 am | |
| Guillaume Laforge | Oct 7, 2008 1:50 am | |
| Jason Dillon | Oct 7, 2008 1:55 am | |
| Guillaume Laforge | Oct 7, 2008 2:25 am | |
| Guillaume Laforge | Oct 7, 2008 2:35 am | |
| Jason Dillon | Oct 7, 2008 3:09 am | |
| Guillaume Laforge | Oct 7, 2008 3:12 am | |
| Russel Winder | Oct 7, 2008 3:17 am | |
| Jason Dillon | Oct 7, 2008 3:24 am | |
| Paul King | Oct 7, 2008 4:04 am | |
| ma...@dockter.biz | Oct 7, 2008 4:19 am | |
| ma...@dockter.biz | Oct 7, 2008 4:25 am | |
| Jason Dillon | Oct 7, 2008 4:36 am | |
| Jason Dillon | Oct 7, 2008 4:39 am | |
| Jochen Theodorou | Oct 7, 2008 5:20 am | |
| Jason Dillon | Oct 7, 2008 8:19 am | |
| Jochen Theodorou | Oct 7, 2008 9:51 am | |
| Jason Dillon | Oct 7, 2008 10:49 am | |
| Jochen Theodorou | Oct 7, 2008 12:03 pm | |
| Hans Dockter | Oct 7, 2008 2:34 pm | |
| Luke Daley | Oct 7, 2008 3:52 pm | |
| Jason Dillon | Oct 8, 2008 1:28 am | |
| Jason Dillon | Oct 8, 2008 1:35 am | |
| Hans Dockter | Oct 8, 2008 3:11 am | |
| Hans Dockter | Oct 8, 2008 3:49 am | |
| Hans Dockter | Oct 8, 2008 4:30 am | |
| Hans Dockter | Oct 8, 2008 4:40 am | |
| Jason Dillon | Oct 8, 2008 4:52 am | |
| Jason Dillon | Oct 8, 2008 5:21 am | |
| Jochen Theodorou | Oct 8, 2008 6:23 am | |
| Jochen Theodorou | Oct 8, 2008 6:47 am | |
| Jochen Theodorou | Oct 8, 2008 6:59 am | |
| Hans Dockter | Oct 8, 2008 8:33 am | |
| Hans Dockter | Oct 8, 2008 8:43 am | |
| Paul Duffy | Oct 9, 2008 8:58 am | |
| Paul King | Oct 9, 2008 1:15 pm | |
| Danno Ferrin | Oct 9, 2008 1:27 pm | |
| Paul King | Oct 10, 2008 2:31 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: [groovy-dev] Building Groovy | Actions... |
|---|---|---|
| From: | Hans Dockter (ma...@dockter.biz) | |
| Date: | Oct 8, 2008 4:30:07 am | |
| List: | org.codehaus.groovy.dev | |
On Oct 7, 2008, at 5:19 PM, Jason Dillon wrote:
On Oct 7, 2008, at 7:21 PM, Jochen Theodorou wrote:
FYI, just my own opinions to your opinions below :-)
What I dislike at current build systems is that you often have no separation of concerns. You write helper in your project that then will be used by the build system, because the build system is not powerful enough to express it on its own. In ant you do this by writing ant tasks. For make in a C project you wrote helper in C. In m1 it was ant tasks too, or something with Jelly. In m2 it can be a plugin written in Java. I think the m2 idea is kind of the natural evolution here. In all these cases you either mix parts of your build logic into the normal project because of helper files not used by your project... or you go further and make a plugin like in m2, which needs to be compiled and deployed. This adds a level of indirection which is praised as the wonder weapon against problems, but I personally think of this as a perversions of an easy build. It is easy when the plugins do come from the outside, but the problem that I have to make leaps and somersaults just because my build system can't properly express what I need remains. In fact I reached the goal to separate my build logic from the build so much, that using this becomes a problem in itself.
First you don't need to deploy anything to use a plugin, you can include the plugin in your reactor build and you are fine.
That's the way I have done it always with Maven. I'm not sure if I would call it 'fine'. It forces a single project build to become a multi-project build. It is another layer in the bizarre amount of indirections Maven imposes onto its users.
Second, using scripting tools like GMaven (or the JRuby plugin or whatever) you can *easily* add extra functionality to your build it basically the exact same fashion as all of these Groovy DSL-based build tools can. In fact as far as getting the build to "properly express what I need remains" goes, there is no difference, simply configure the plugin and write up your groovy to do the remaining bits.
I strongly disagree here. What you are describing is a very different, anemic approach of doing things. What you can do with GMaven is to call Groovy from a pom.xml. This calling is very limited. It is a single call where you can pass parameters via XML. That's it. You have no chance for example to control the Maven workflow by any return values of the called Groovy code. I want the build script to be able to be in charge of the choreography. Like a session bean that handles the basic workflow. With the Gradle plugins you can easily inject out-of-the-box workflows. But if the user likes he or she is in charge.
For example I have code to start a process on a certain machine. In one build I want to use this code and if the process can't be started I want to call Goal A of plugin X. In another build, if the process can't be started, I want to call goal B of plugin Y on Friday, on other days I want to call goal C.
Another problem of most build systems is that you have to breach media very often. In ant you program in XML... that in itself is something I think should be considered as a media breach... but most people then go and XSLT or write custom ant tasks. You use these, because the XML becomes unreasonably big if you do not do so, or things can be expressed more easy that way. Again the build system and the way of usage is to be considered as not powerful enough here. In make you often use autoconf... a joy in itself, but probably still better than many ant builds... only that autoconf doesn't help you much with java builds. In m1, well I mentioned the usage of jelly and ant tasks already. With the ant task you have not only a media breach, but also a breach in the build system usage... m1 was thought to be independent of ant, or not? And jelly... well let us better forget that chapter. Now in m2 you have your plugins and your XML, which is again a media breach. The only way for m2 to avoid this is to minimize the XML part and hope no custom plugin is required. But the standard answer from the m2 guys to all sorts of problems seems to be to write a plugin...
Ant was *never* intended to be a scripting language... in other words you "configure" Ant, you don't "program" Ant.
I see this differently. With the new stuff introduces in its last releases Ant has chosen to become a scripting language (mixins, macrodefs, ...). To cite Steve Loughran, an Ant committer and author of the book 'Ant in Action'. He said about the new features introduced by Ant: Think of all the fun you can have with that. With this and the Ant-contrib tasks of chapter 10, Ant is almost a real programming language. It doesn’t have local variables, but it does have something close to it.
Sure if you need something outside the set of existing tasks you need to program a new task, or use one of the scripting tasks that are available, which brings us right back to the same point I'm making above.
Um, is using a Java-based tool to build a Groovy project a breach as well? I'm not buying this argument at all... but I understand its your opinion and I respect that. :-)
It is about the mind set and the equivalence of tools. In this respect Java vs. Groovy is obviously not a breach in contrast to XML.
The third part of my thought is "don't look only at the easy things". Of course all build systems have certain use cases where they are very easy to use. You can use make without autoconf in some cases, you can have small and nice m1,m2 and ant builds files... but what if you have to leave the road they gave you? make isn't good at checking library version information or even if there is such a library... it simply isn't in its scope. So a layer on top was made, the configure script. make has other problems as well, but I don't want to write a book here ;) m1.. well I am not really sure what was right or wrong with it... saying it was simply broken looks so unfair... but I am sure many will see it the same. I think ant is not really bad, it just grows too much and becomes unmaintainable then. Sure you have the media breach, but at last the so generated tasks are very easy to use. In m2 they tried to make it all better by conventions and restrictions. In fact so many of them, that they loose the easy usage part like ant has it and like they still had it in m1.
M1 had lots of problems, one of them being that it, like ant, ended up allowing developers so much freedom they end up shooting themselves in the foot, or really drown themselves in the mess of configuration they cooked up. IMO this is a fundamental problem of build systems. Too much flexibility, no enforced standards and in a year you have something which no one really understands and only a few can safely maintain. I'm really only referring to larger projects, for the really simply projects any of these tools will work fine as long as nothing fancy is required.
I don't really believe that M2 convetions and/or restrictions take away from any easy usage though. Surely it does add some extra xml muck, but IMO its easier to configure a simple M2 pom to compile a project than it is to configure Ant. You don't have to know anything about plugins (or tasks) just the basic pom elements to set the groupId, artifactId, version... and where to put your source files. Fairly easy IMO... and really not all that different from Ant, where you have to know which tasks to configure and how to configure them, as well as pick some place to put your files. M2 removes the need for folks to know about plugins or configuration for simple projects, simply make a pom.xml and put your goodies into src/main/java or src/test/java and you are done. IMO that is much easier. When things get more complicated I believe its about the same for Ant or M2 (or even M2) have to *know* more about the tool, how to configure, what to configure, etc.
On the one hand you are saying that there is a difference in flexibility. On the other hand you are arguing that the decisive factor is the know how you have about a build system. I think the tool is important. With infinite knowledge about the respective build tools there would be still a big difference in what you can achieve and how easy you can achieve things.
<snip>
I think a build system can be most powerful if it is based on a programming language, allowing you to write tasks/plugins without media breach. Where you can hook into the build logic itself to bend it to do your non standard things... maybe even making a more or less new build system out of it, if you need that. So instead of avoiding logic in the build file, the build file should consist of build logic. That is completely against the ideas in maven. But most people using build files are more or less good programmers and why should this potential power not be used?
Yikes... when I had a *normal* corporate job I would almost never let folks go hack on build files for the very reason that I found that most were more or less poor programers, sloppy, only caring about their own job. So putting build logic into a file which anyone could drop random muck into would have been a catastrophe ;-)
The same is true for any code they would touch. I think with those kind of people you have lost the case for productive software development anyway. But this can't be an argument for not offering a powerful tool.
<snip>
And I think a programming language to program/configure the build is what is needed to get this working.
I am not sure if gradle can already achieve all these goals already or if it even intends to do so, but I think gradle is more near to this ideal than ant or maven.
In smaller groups, where folks pretty much know about all of the codebase this might work. But in larger enterprise or open-source groups this is almost certainly a recipe for disaster, as you get new folks coming in all the time, they go look at build goo and don't understand it, or worse yet don't understand it and try to change it. Developer comprehension of build tools is IMO very important, especially when they have to muck with it, and IMO a build tool where you code up everything in any way you feel like at the moment, will probably cause some problems for new folks to understand easily.
For Java/Groovy developers a build based on Groovy is more transparent than a build based on an external XML language like Maven offers.
<snip>
I think that ant has a bad cost factor here. It does not take much for the build to be too complex. And I think for Groovy we already reached the point where just one or two actually know what the build does. At times of m1 I understood the build more or less, but from my point of view the current build is at last as complex as the m1 build now... and I fail to understand it anymore.. to many strange fork calls are in there for me. so each change will brings us to the point where noone actually understand the build anymore... and I don't think that the current build will be sufficient for whatever we do in Groovy in the future. For example I would like to automate the upload of the files. I would like it to handle connection problems and other stuff. But I don't dare to write something for ant. So from my point of view we already reached the point where we do certain things not anymore, because it is too complicated.
I can't help but mutter a teeny tiny "I told you so" here. I was warning about the decay many months ago :-\
Regarding uploading files (and other release management stuff), I'm curious what Gradle has to offer. Found a ref to an Upload class, but the content at the link is missing:
http://www.gradle.org/api/0.4/org/gradle/api/tasks/Upload.html
We offer the whole flexible word of Ivy (http://ant.apache.org/ivy/ history/latest-milestone/settings/resolvers.html). Unfortunately our Javadoc is not complete yet.
<snip>
- Hans
-- Hans Dockter Gradle Project lead http://www.gradle.org
--------------------------------------------------------------------- To unsubscribe from this list, please visit:







