Here is the offending page from Brent's book. I think it will be on the MSDN web site before long, as it is the chapter promised this month -
http://msdn.microsoft.com/Longhorn/understanding/books/rector/default.aspx
I have added my commentary. This is the last paragraph on chapter 2, just after a critique of make. My comments are in brackets.
MSBuild vs Ant ===============
A similar frequently asked question is why develop a new XML-based build system when there's an existing system called Ant? Ant is a Java, open source build system from Apache.org that uses XML-based configuration files. There's a .NET port called Nant from nant.sourceforge.net as well. On the surface, MSBuild and Ant/Nant seem similar. Both tools use XML as their project serialization format, and both tools use tasks as their atomic unit of build operation. However, a deeper look reveals differences in the two tools, some of which I describe here:
1. Ant does not provide built-in target dependency analysis -a requirement for a scalable build system
[This has no impact on build files, merely effort to write new tasks. We do leave it to tasks, but they get to implement their own logic. Having to implement it yourself adds work to the task developers, but they get to write task specific rules. Like, for example, <jspc> knows the name mangling rules to go from .jsp files to valid java source files, and ftp knows about ftp sites and time zones.]
2. Ant does not have a clear concept of a project manifest -a necessity to develop additional tools to process the output of a build system
[Ant has a clear concept of a project manifest: the build file. This is well-formed XML, and none of the many IDEs that use Ant have complained yet. What Ant does not do is provide a schema as that would destroy its extensibility model.]
3. Ant does not have a normalized concept of task inputs and outputs; a necessity for a build system to support intra-task communication.
[we do have common data structures, like fileset, but to do piping we may need to introduce more concepts.]
4. Unlike Ant, MSbuild is a secure build engine. MSBuild introduces the notion of partially trusted builds, project level sandboxing and task level sandboxing.
[Ant is a secure build engine. Most people never do this, but when Ant runs inside Tomcat, it is sandbox mode. Other embedded uses of Ant would be expected to use the appropriate security model. Note also that Ant permits one to set the security permissions on code when using the <java> task, so one can run code in a sandbox from inside Ant.]
5. MSbuild has a richer extensibility model than ant. MSBuild uses constructs not available in Java. Examples range from the ability to batch tasks intelligently, or to allowing custom tasks to specify attributes as optional or required.
[Ant has a richer extensibility model than MSBuild. Ant lets third parties add new conditions, selectors and datatypes as well as tasks. Ant allows custom tasks to support arbitrary XML elements inside the task. Finally, being open source (BSD license), Ant can be extended in ways that we cannot imagine. Any part of it can be reused or changed to meet developer needs.]
6. Ant does not have the ability to import (macro insert) parts of the project file -a necessity to factor the build system into maintainable reusable pieces and a fundamental requirement for enterprise build systems.
[Ant has the ability to import (macro insert) parts of the build file using the <import> task, which even handles target name conflicts. It also lets you invoke ant builds in other files using <ant> and <subant>. We also support XML entity inclusion for inserting arbitrary text]
---
There is something deeply misguided about faulting Ant for its lack of scalability or extensiblity. Ant is intrinsically more extensible, being open source, and its scalability is something learned over time from being used in big projects. I can only conclude that Mr Rector's deep look at ant didn't go beyond asking some MS marketing weasel why MSBuild was better than [N]Ant.
If you are going to criticise ant, criticise it where it is weak, like having inconsistent naming of attributes, no consistent failonerror settings, and lots of list-like/set-like types with no underlying class other than java.lang.Object. But dont pick on scalability or extensibility, that is just picking an argument you intend to lose.
------------------
What are we going to do now. I am feeling ruthless.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]