my two cents: I agree we Mark: the decision if goal should be started or not should belong purely to this goal and is out of the scope of the rector.
It's kind of micro-scale decision. Using this strategy we can speed up the execution of most of the goals and reactor will profit from this strategy for free. So I say: we need timestamp files and other ways of expressing condition when given goal should be started and when not. I also agree with Mark: This will be painful do to in jelly. But I am almost sure that this has nothing to do with reactor itself. Michal > -----Original Message----- > From: Mark H. Wilkinson [mailto:[EMAIL PROTECTED] > Sent: Wednesday, July 02, 2003 12:34 PM > To: Maven Developers List > Subject: Re: smart reactor proposal > > On Wed, 2003-07-02 at 12:18, Jason van Zyl wrote: > > On Wed, 2003-06-04 at 05:47, Aslak Hellesøy wrote: > > > I think this can be implemented quite simply by doing some date > > > comparisons between java sources and classes in each project. > > > > Did you ever make any progress on this because I was going to add some > > stuff to JIRA about uptodate checks in general for docs. There are some > > checking utilities in CruiseControl and there is some stuff in DVSL > > itself so I'm going to steal something and make a general tool. > > Hrrm; I started writing up my thoughts on this yesterday to save for > after 1.0 was out, but I guess I should air them now. Basically, I think > that the problem is that neither ant nor maven currently do dependency > checking in the way make used to, and I think that this hurts maven more > than ant because maven's plugin system leads to larger graphs that > describe the build system. The following is quite long, but hopefully it > explains the problem. (Well, what *I* think is a problem, anyway. I'm > sure others will likely disagree with my opinions... :-) > > In a nutshell, make builds a dependency graph where the nodes are files, > arcs are dependencies and arcs are annotated with commands that can be > used to bring files up to date if their timestamps indicate that > something is out of date. > > Ant builds a dependency graph where the nodes are scripts and the arcs > describe the order in which the scripts ought to be run. > > When you run make you tell it which file you want it to build, and it > works out the minimum set of commands that need to be run to make sure > that file is up to date. > > When you run ant you tell it which script you want it to run, and it > works out all the scripts which are required to be run before it. It > then runs every single script, whether needed or not. Some scripts > include statements that take a bit of time to execute, so those > statements make local decisions about what they need to do based on > timestamps, but there's no overall mechanism for file timestamp > dependency checking in build.xml because the dependency graph just > doesn't model that kind of thing. > > Maven at the moment is kind-of like ant, with a bunch of plugins that > build a similar dependency graph to describe an idealised build system. > So you get a nice complete build system without having to write a 500 > line build.xml. But it's still just a dependency graph that connects > scripts (goals) together. > > The reactor resolves dependencies at a different level - where ant (and > normal maven execution) satisfies dependencies between scripts, reactor > satisfies dependencies between artifacts required by one project.xml and > those built by another project.xml. It presumably builds a dependency > graph between Projects based on artifact ids, and then works out an > ordering over those projects. > > So the reactor takes multiple script-dependency graphs and works out an > ordering for running named scripts in every project. Not surprisingly > this can lead to maven spending lots of time just running scripts, even > if those scripts don't need to be executed. > > One solution to this would be to make more of the individual statements > check timestamps before they run, but this is not easy. It needs logic > adding to every piece of processing that can take a significant amount > of time. It's harder for things that are written in jelly because > there's currently no mechanism for checking timestamps (I think - and I > guess this might be the kind of solution that Jason's alluding to > above). > > But having done this, maven would still need to run the entire script > chain so that each statement can confirm that nothing needs to be done. > > Another solution is to try to short-circuit the reactor, with some kind > of check to decide on a project-by-project basis whether a build needs > to be done or not. I think this is what Aslak's suggesting. > > I'm wondering if there's a fundamental reason why we couldn't change > maven to build a dependency graph of files with scripts attached to the > arcs, just like make used to do. Statements and scripts would need a way > to expose the lists of source files and target files to the maven core > to build the dependency graph, but that doesn't seem like an > insurmountable problem. The reactor would become a way to stitch > dependency graphs together, saying that when one project runs the > jar:install script to bring $MAVEN_REPO/group/jar/foo-1.0.jar > up-to-date, this is the same artifact that another project has declared > in its project.xml. But the result would be the ability to work out the > minimum set of scripts that need to be run across a large reactor build > purely by checking timestamps on files and without going through the > process of running every step in the process. > > You probably now see why I was leaving this until after 1.0 was out! > > Thoughts? > > -Mark. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]