Ant - The Definitive Guide 205
Ant The Definitive Guide | |
author | Steve Holzner |
pages | 316 |
publisher | O'Reilly |
rating | 8 |
reviewer | Pankaj Kumar |
ISBN | 0596006098 |
summary | Complete Build Management for Java with Ant |
As a long time Ant user, I have written many Ant build scripts, automating my builds and speeding up the overall development cycle, mostly relying on its excellent online documentation. As a Java developer, I have admired its simple and intuitive interface and the modular design. So on getting Ant: The Definitive Guide in my hands I wasn't expecting a whole lot new to learn, and thought of using it only as a reference book.
After having the book on my desk for more than a month, though, and occasionally flipping through its pages whenever I would otherwise have consulted the online documentation, I must say that I had been missing out on some very important things: tasks like ftp and war deployment that I was simply not aware of and had never felt the need to look up, but could very well use. The other interesting thing I noticed was that my build scripts became smaller, more modular and easier to read.
Like most books in the The Definitive Guide series, Ant The Definitive Guide assumes a certain level of familiarity with underlying technologies such as Java and XML and focuses on providing complete, reference like details of Ant features and tasks. These description are generously supplemented with examples and code fragments.
But so is the the online documentation for Ant! Will someone gain additional insight in using Ant, or be able to work faster, or make better use of Ant capabilities, by consulting this book, instead of the online documentation for a particular Ant task? To find the answer, I randomly picked two topics -- filesets, an important and oft-used Ant datatype, and javac, a core Ant task -- and compared their online description with the one in the book. Here is what I found.
Besides the datatype definition, explanation of various attributes, sub-elements, and the examples, the book also covers how to specify conditional inclusion or exclusion of certain filename patterns when a property is set (or unset). Though this can be inferred from online documentation by a determined user, this particular use is far from obvious. The coverage in the book also talks about the relationship of the fileset datatype with the javac task, pointing out that the fileset attribute dir is equivalent of javac attribute srcdir, as attribute dir will be confusing in javac: is it referring to source directory or destination directory. This is the kind of insight that really helps a user.
The treatment of the javac task in the book is not much different from the one in the online documentation. Both have almost the same material, though the information in the book is better organized for new users. On the other hand, I found the online documentation to be more complete, especially with respect to the compiler specific options and behavior idiosyncrasies.
Here is a rundown on what the book covers: Chapter 1, Getting Started is a quick primer on Ant, with sufficient details for a new user to start using Ant for very simple build tasks. Chapter 2, Using Properties and Types introduces the building block tasks and datatypes, such as property, condition, fileset, path like structures, selectors and so on, used in other Ant tasks. Chapter 3, Building Java Code covers the tasks and activities around compiling Java source files (ie; javac), organizing the build steps in various targets within a single build scripts and/or across multiple scripts, generating documentation using javadoc and creating distribution jars and zip files. The rest of the chapters are devoted to tasks for specific purposes, such as launching external programs (Chapter 7, Executing External Programs), copying files and manipulating directories either on the same machine or over the network (Chapter 4, Deploying Builds), running JUnit tests (Chapter 5, Testing Builds with JUnit) and so on. There are also separate chapters covering interaction of Ant with XML and XDoclet (Chapter 9, XML and XDoclet) and with Eclipse (Chapter 11, Integrating Ant with Eclipse). The last chapter, Chapter 12, Extending Ant, talks about extending Ant by doing things like adding your own tasks, creating custom filters, writing your own build listeners and loggers etc. This chapter also has a small section on how to embed a script written in one of the supported scripting languages within an Ant script.
As you can see from this outline, the book covers almost everything that is to know about Ant and other related software.
So, what is not so good about this book? Well, I didn't find anything wrong with the topics which are actually covered by the book. Of course, there are additional things that I would have liked to see in the book: (a) A good sample Ant script which could be used as the starting point for most small to medium-sized projects; (b) A more thorough explanation of how dependencies among targets determine the execution sequence and how this fits in with explicit invocation of targets; and (c) pictures to illustrate some of the concepts such as life cycle of an Ant task, selection of files in a fileset and the dependency tree of targets.
Overall, I found the book to be comprehensive, well organized, easy to read and good value for money.
You can purchase Ant: The Definitive Guide from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
Make file (Score:2, Informative)
Re:Make file (Score:3, Informative)
Re:Make file (Score:2)
Re:Make file (Score:5, Informative)
Just like JCL(IBM's job control lanaguage). Read the New Hackers Dictionary description [outpost9.com] of JCL. An excerpt:
About sums up my opinion of ANT.
Re:Make file (Score:3, Insightful)
Re:Make file (Score:2)
Let me instead ask you... do you work with Java code? If so, how do you build your projects?
Do you let your IDE do all the work? Or does your company IT department handle all compiles? Or...?
Re:Make file (Score:2, Insightful)
Re:Make file (Score:3, Insightful)
Tab Delimiting Vs Space Aligning (Score:2)
Unix originated the idea of the tab-delimited file as a simple way to delimit fields and records (with a character that was unusable in the field data). But it quickly fell from favor because text editors were inconsistent when 1-byte of data did not equal 1 space on-screen. The tools failed them so they abandoned tab-delimited file formats.
Oddly enough, the ancient Mac OS (pre-OS X) users h
Re: (Score:2)
Re:Make file (Score:3, Insightful)
Of course, most people I know who hate XML write their XML on a VERY long lines, with lots of elements jammed in together, and then they complain that it's hard to read.
Re:Make file (Score:2)
Yep and just about every XML editor/parser out there - including Ant itself - will scream if it's not a well-formed document.
Re:Make file (Score:2)
Yeah, since xml is so great [xmlsucks.org] and we are not creative enough to develop a better format than xml or makefiles.
mwuhahahaha (Score:3, Funny)
Nothing, you have to read it.
Sorry, i just had to...
Ant life cycle... (Score:4, Funny)
Here ya go:
Life Cycle [rinconvitova.com]
Only two words necessary (Score:2)
Re:Only two words necessary (Score:3, Interesting)
I thought I'd try Maven. After spending 4 hours looking for and reading what passes for documentation on the Apache site, I gave up, and wrote a batch script to do it in 15 minutes.
The Apache docs suck for many of their projects (Tomcat, Maven, Axis). Do the developers do it on purpose so that they can make money writing book
Re:Only two words necessary (Score:2)
Re:Only two words necessary (Score:2, Informative)
Re:Basically (Score:4, Funny)
Ant is for Java programmers,
Maven is for idiots.
Bookpool has it cheaper than bn.com (Score:3, Informative)
Necissity if you use Ant (Score:2, Insightful)
Frankly, I don't care about building Java. (Score:5, Interesting)
Is there anything out there that is (a) easily deployable (nothing turns off a prospective user than being told to download and install a complicated build system that depends on $LANGUAGE_OF_THE_MOMENT), (b) suitably flexible that I can customise it to work with all my little build tools, and (c) sufficiently elegant that I won't want to vomit looking at my build scripts six months later?
So far, the only thing I've found that works at all is traditional make. Which, I'm afraid, sucks. Makefiles scale very badly (recursive make. Eeeaah), don't handle disparate rulesets well (I want to build these C files with this rule and these with this other rule... oh, wait, I can't), and the dependency handling is practically nonexistent (you can fake to a certain extent with .d files, but that all falls apart as soon as you need to depend on dynamically made files).
A case in point: I maintain the ACK [sf.net], a portable compiler toolchain that's about 20 years old. The build system is an intricate network is shell scripts and recursive makefiles. It works, but it's largely incomprehensible, very slow, doesn't handle incremental rebuilds, and is going to be a maintenance nightmare should we ever need to do any major revamps. I'd love to replace it; I've gone out actively looking for something better --- and I've failed.
Any suggestions?
This has been a public service rant by a stressed build technician.
Re:Frankly, I don't care about building Java. (Score:2)
The main thing is that you really wan
Re:Frankly, I don't care about building Java. (Score:2)
Well, nice if you to post your complaints in a forum about Ant and Java, then.
Re:Frankly, I don't care about building Java. (Score:2)
Prolog.
No, I'm not kidding. Solving complex dependency trees is what Prolog's *for*.
Re:Frankly, I don't care about building Java. (Score:2)
Prolog for Make (Score:2)
Defining your dependencies in Prolog or some similar language makes all kinds of sense.
Re:I completely agree (Score:2)
Ant is extensible, so I wouldn't be surprised if a lot of tasks have been made available for programming languages other than Java.
Using Ant with PHP (Score:2)
Re:I completely agree (Score:2)
I've used it with C and with C++ to build shared libraries on a Linux platform that were later bound to JAVA via a JNI interface.
Take a look at ant-contrib, they have a c/c++ compiler ant task. I'm not sure about other languages, but here's some other things I've done with Ant that aren't really JAVA centric.
I've used Ant to transform XML to other various things, including DocBook build systems to various HTML, PDF, TXT, etc. files.
I've used Ant to verify that documents conform to their appropriate
Re:I completely agree (Score:3, Interesting)
Re:I completely agree (Score:2)
However, I would be interested to know how to use Ant with the CDT for other purposes --- it's got to be better than Make, particularly if Eclipse will automate it. Do you have any references?
SCons (Score:5, Informative)
The software, as well as the confuguration files, are actually Python. But, you won't notice until your build requirements get quite complex.
Scons keeps track of dependencies using MD5sums on the tail nodes. This takes up a bit more processing time, but more than makes up for it with highly-parallelizable builds (SCons + distcc totally rocks), guaranteed correct builds (never do 'make clean' again!).
We've just converted a project from Make to SCons, and it's cut our build time by about 40%. I might even be able to convince our java guys to try it out, too
Re:SCons (Score:2)
Re:SCons (Score:5, Insightful)
The only problems I've run into so far relate to SCons being a little too clever for it's own good, and not 'neatly' letting me do things that make could do. I worked around them, once I understood SCons better
For example, SCons lets you generate static and shareable objects using 'StaticObject' and 'SharedObject', and will 'do what's necessary' to make that work on your platform. Eg, under *nix, it will add '-fpic' to SharedObject. It will also refuse to let you add a StaticObject into a SharedLibrary. Which in most cases is just what you'd want to stop happening, but... if you KNOW that in a particular case it will work, then SCons is getting in the way. Eg, we wanted a
But... there's workarounds and they all 'make sense', but require a little more SCons knowledge. The mailing list is quite active and helpful, though.
If your project is straightforward (even if it's HUGE), then there's no problems at all.
Re:SCons (Score:2)
I'm not familiar with SCons, but this doesn't compute. The problem with make isn't with recognising changed files, it's identifying dependencies in source files (hence 'make depend').
'make clean' is an artifact of changes to the build environment that are not properly represented in the dependency graph. Looking at SCons, it appears the authors have a few neat ideas, but I fail to see how a different management tool will help in working o
Re:SCons (Score:4, Informative)
The 'md5sum' thing ensures that you're not relying on timestamps. Especially important if you're dealing with several machines that might not have their clocks synchronised perfectly. Furthermore, the 'signature' of any of the build nodes is the concatenation of the MD5s of all it's dependencies, PLUS the command lines to generate that node. Change ANY one of those, including changing any compiler flag, and the signature doesn't match, and the node gets rebuilt.
SCons does its own inherent dependency checking, and caches that, too, plus recording the signatures of all the files needed to generate that information. If any of THAT changes, it will re-get dependencies, and then use the result to determine if a node needs to be rebuilt. This, plus the previous part, makes 'make depend' unnecessary. SCons always gets it right, which cannot be said for Make, or (I think) even Ant... (We currently DO have problems with Ant after a 'cvs update'.). I'm pretty sure that you can make your '.depend' files depend on the files that were used to generate it, but the solution [gnu.org] for that for Make (unsure for Ant), is UGLY. SCons handles it all automatically.
SCons also handles cross-platform builds. It's actively tested under *nix and Windows.
Really, if any product deserves to be called a 'category killer' for this category, it isn't Ant, it's SCons.
Re:SCons (Score:2)
Scons is also confusing if you want to do anything more than make c files out of one directory.
Also, the community surrounding it is insufficient to provide full support. Go in with the knowledge you're going to have to open the covers to see what's inside. (ie. you have to be good at Python, even though they claim otherwise.)
JUnit? (Score:2, Interesting)
Hey, make fiends, try this: add new functionality to make, extending its syntax. PITA, you say. It's very simple with ant.
Re:JUnit? (Score:2)
you don't have access to always go around putting extra jars into the ant lib folder or even the ~/.ant_lib or whatever private folder ant also looks at for its main classloader. you can nearly assume you can do the following:
cvs co projectname; cd projectname; ant
that's about it.
Additional Ant Goodies (Score:4, Informative)
Also, although Ant is used mainly to build Java, it is NOT java-centric. It can be used to compile any language.
Forgive my ignorance... (Score:4, Interesting)
Very confusing to someone who just has a high-level understanding of Apache world.
Re:Forgive my ignorance... (Score:3, Informative)
Basically Maven is an extra layer on top of Ant. Or another way of putting it is that Maven is way to program Ant in an XML based language called Jelly. Maven has the concept of repositories and versions, so that you can say that a particular jar file requires specific versions of other jar files in the repository. If yo
Re:Forgive my ignorance... (Score:3, Informative)
toolkit vs framework (Score:2)
Maven: a framework or skeleton your build will follow, declaratively. "This is the source tree..."
Does it apply to NAnt too? (Score:2, Interesting)
My gripes about ant (Score:2, Insightful)
<if>
<equals arg1="${foo}" arg2="bar"/>
<then>
<property name="bat" value="barf"/>
</then>
</if>
... give me a break.
What I'm always hoping for is a build system that is just a perl / python library, so I can write the build script in a real language and call the build system when
Re:My gripes about ant (Score:2)
Re:My gripes about ant (Score:2)
Re:My gripes about ant (Score:2)
Ant is simply not a Make replacement (Score:4, Insightful)
Ant can automate Java builds slightly better then a
The major problem is that Ant has no built in dependancy system. Dependant tasks don't count as they have no targets and thus nothing to check for dependancies. All real dependancy checking in Ant is embedded in the Ant task code...which varies task to task and worse yet has little to no documentation (not even documented to be taking place or not!). Examples are javac, zip, copy tasks.
Ant + Javamake gets closer to a Make replacement, but not completely.
But really, to be accurate Ant is a portable
Re:Ant is simply not a Make replacement (Score:2)
No dependency system? Whatever do you mean? When writing Ant files you configure dependencies between Ant targets. A target in turn has a number of tasks that do the actual work. The if or unless attributes in a target can be used to decide whether to execute the tasks within a target or not. So if you sometimes don't wish to execute a javac, zip or copy task you should place that task in a target with either the if or unless attribute.
Re:Ant is simply not a Make replacement (Score:3, Informative)
But still, ant is no make. It's not ant's fault, but more a fault of the underlying reason that make is both powerful and problematic. Make leverages the power of it's shell and all the utilities that have been written explicitly to make shell scripting possible. Make (by itself) doesn't do a lot except call a bunch of p
Ant is a Misapplication of Technology (Score:4, Insightful)
Re:Ant is a Misapplication of Technology (Score:2)
Re:Ant is a Misapplication of Technology (Score:2, Interesting)
The answer is that all of these groups and people created a XSLT - a functional XML programming language. That's right, the people who produce the XML spec also produced an XML programming language, just like Ant.
XML is a meta-markup language, a series of rules, and you can represent data files as much as you can represent progra
Re:Ant is a Misapplication of Technology (Score:2)
The W3C is not an authority on anything. They are more of an idea reviewing and specification
Ant IS complicated (Score:2)
But its just like makefiles... stop being scared, figure it out, and then welcome to the world of easy-builds.
(or you could just add your object files to the jars by hand...)
Re:GUI (Score:4, Informative)
Last time I used it the paths were added as absolute paths so I continued editing my scripts by hand, though.
Re:GUI (Score:2)
There are examples of how to use every task. It's really pretty easy once you get started.
Re:GUI (Score:2)
Not quite a help wizard, but Eclipse is really good with ant files, especially the most recent version. Will auto-complete tags and variable names, plus some other useful tools. I can't imagine doing them in a text editor!
Re:GUI (Score:3, Insightful)
If there isn't a GUI for editing ant files, there really should be.
Re:GUI (Score:2)
Ant files are pretty easy to read, and they are normally not computer generated. I've never had much problems reading them, and they are infinitely more easy to r
Re:GUI (Score:2)
No, it doesn't (Thank God!). You're thinking of netbeans.
Re:GUI (Score:4, Insightful)
No, it doesn't (Thank God!). You're thinking of netbeans.
Why 'thank God'? Why should internal use of Ant be a problem? On the contrary, it has major advantages: It means you can build the project outside of the IDE, and it means that the IDE can make use of just about any Java tool, as almost all of them provide functionality as Ant tasks. Compare this to eclipse, where you need to install plug-ins.
Re:I know the moderators will tag me, but... (Score:4, Insightful)
Ant isn't for sys admins.
It is simply another build program to learn. The C and C++ stuff for the kernel is "make" - now I have to learn "ant" for Java programs.
As Java isn't used (yet!) for kernel stuff, what is the problem?
I am not against learning new things, but where some people see XML as a good thing - I think it sucks! I despise any time I see a config file that is XML. XML is for the "parsing impaired" - use a plain text file like everything in
Sorry, wrong way around. XML was designed specifically from the start to be parser-friendly. There are very simple APIs which handle any XML file such as SAX.
Re:I know the moderators will tag me, but... (Score:2)
i don't assume that, as a sysadmin, you should have to deal with (java) software that others write, except maybe to install it.
as a sysadmin, dealing with XML and java (Score:2)
I was under the impression that XML was designed to be written and used by machines with little intervention from people. Some people insist it's a programming language. I hope those people burn in heck.
Re:as a sysadmin, dealing with XML and java (Score:2)
XML was always meant to be human readable and human editable, that's why it isn't in a more compact binary format, and the tag names are typically full words describing the surrounding contents. Machine handling is very important too, and that's where the strict syntax comes into play.
XML isn't meant to be a programming language. Actually, in ant, XML is the configuration file, not a scripting la
Re:I know the moderators will tag me, but... (Score:2)
Nothing, except that Ant has a huge amount of support for Java and associated tools. Almost every tool and product developed to assist Java developers provides an Ant library to add functionality. To work with 'make' would be a huge step backwards.
So MAKE it useful for system admins. (Score:2)
And converting them to XML won't change that, because unless you're dealing with files that are very much more complex than the ones in
Re:So MAKE it useful for system admins. (Score:2)
But anyway, the problem with
is that it assumes that there are no fields that contain a : character. The moment you get a : in gecos or more radically a group name, grep et al fall apart. If we were dealing with CSV files you could see something like
and awk would just cough and die, because there's no good way to explain the escaping conventions to it.
Re:So MAKE it useful for system admins. (Score:2)
That's because there are no fields that contain a ":" character. If there could be fields containing a ":" character, then ":" wouldn't have been chosen as a separator. If you put a ":" character in there, then you've created an invalid password file. The standard utilities won't create a file like that, vipw will refuse to write it, and so on.
If you were dealing with CSV files, you'd have the same problem with a malformed CSV file.
Same with
Re:So MAKE it useful for system admins. (Score:2)
Oh, you're just blatting out XML with printf? You deserve to lose, then.
That's the difference here. You're d
Re:So MAKE it useful for system admins. (Score:2)
Never. I write scripts that actually work on real systems. The solution to the "file beginning with -" problem is "start every pattern with
This problem has nothing to do with XML, by the way. It's a language issue, and it's shared by every language that includes an "eval" operat
Re:So MAKE it useful for system admins. (Score:2)
But many programs are much more dynamic than UNIX's
You could achieve the same effect with a combination of sed, awk, and sh scripts, but then the bur
Re:So MAKE it useful for system admins. (Score:2)
I don't think you're disagreeing with unless you're dealing with files that are very much more complex than the ones in
Re:So MAKE it useful for system admins. (Score:2)
No it isn't. Just stick to the simple XML guidelines and any XML parser can parse them.
If you want people to treat XML seriously
Almost everyone already is treating XML seriously.
, give them the tools to do something useful with them. Before you produce another "ant", give us xmlgrep, xmlsort, xmlawk, xmlsql.
All this is already there
Re:So MAKE it useful for system admins. (Score:2)
I showed you an example of parsing
All this is already there. There is a standard XML dialect called XSL...
Show me. Show me something that's already hooked into a conventional scripting language (sh, awk, etc) that can be used without major dependencies (so that it can actually be used during boot) and that doesn't involve writing XML to parse XML.
Solutio
Re:So MAKE it useful for system admins. (Score:2)
You don't need a DTD.
You showed how to parse
I can show you a Java or C or PERL program that can retrieve the value of the second element in any XML file.
Show me. Show me something that's already hooked into a conventional scripting lang
Re:So MAKE it useful for system admins. (Score:2)
I'm not sure I understand how that's meaningful.
What you're saying is "with XML, you don't need to write a different two-line parser for each file".
What I'm saying is, "with XML, you still have to do something useful with the data". And "doing something useful" involves enough work that the potential savings from the file format are negligable. And "doing something useful" is actually harder wi
Re:So MAKE it useful for system admins. (Score:2)
select bind(passwd,'/etc/passwd.xml'); select home from passwd where uid >= 1000;
How about: /etc/passwd[@uid >= 1000]/@home
XSL already exists, and is much better suited to XML's heirachical structure than trying to force it into a relational model so you can use SQL on it.
Re:I know the moderators will tag me, but... (Score:2)
As against what? Some arbitrary and undocumented text format?
Re:I know the moderators will tag me, but... (Score:2)
What utter nonsense! Of course XML has delivered. An example is the Open Office document format, that is XML-based, easy to transform to other formats (such as PDF), and because it is XML (open and documented) is also now accepted by KDE office applications.
Re:I know the moderators will tag me, but... (Score:2)
I.e.: I see your point (see below), but what does that have to do with this book?
I've been "bilingual" for awhile and that fact landed me in a mixed C++/Java project last year. Some consultants had built some of the java stuff using Ant and it just made things confusing and unnecessar
Re:Ant does the job... (Score:5, Informative)
If you understood Ant, you would know that it can do this as well.
Re:Ant does the job... (Score:2)
FYI: I use Ant to build/test/deploy my Java code.
Re:Ant does the job... (Score:2)
This is a reasonable point. However, the original post mentioned C or C++ as part of a general Java project, so any support should be adequate. For better or worse, ant is Java-focused, so C and C++ building is not going to be a priority.
Re:Ant does the job... (Score:2)
The documentation isn't great, actually (when I used it) it sucked, or more to the point, I couldn't find it. Finally I found an open source project that used the task successfully, and used thier build.xml file as a template for the compiling I had to do.
Mabye I'm being too harsh with respect to the documentation, since a quick look over at http://ant-contrib.sourcefo [sourceforge.net]
Re:Ant does the job... (Score:4, Informative)
You don't need to learn make from books because you already know it, and if you knew ant, you wouldn't need to read books like this either.
Even if you didn't know ant, the online documentation is sufficient. That is how I learned ant.
Great Quotes from Computer History (Score:2)
The best thing about C is that I don't need to read books about C++.
The best thing about C++ is that I don't need to read books about JAVA.
The best thing about Lisp is that I don't need to read books about Carly Fiona.
The best thing about AWK is that I don't need to read books about Beowulf Clusters.
The best thing about bash is that I don't need to read books about hot grits.
Your statement is truthful, but lacks substance.
Re:Ant does the job... (Score:2)
make is awful. Different operating systems have different command line syntax, different path separators, limits to command length, etc. And which make [makemaker.org] are you using? nmake, dmake, bsd make, etc? There are tons of different make programs, many of which are subtly incompatible with one another and sometimes incompatible with different versions of themselves.
So if you can tightly control the operating systems you are distributing to and tightly control the versions of make you are using, make is a fin
Re:Ant does the job... (Score:2)
Your complaint belongs in the late 80s or so.
Re:Ant does the job... (Score:2)
Regardless of whether or not that is true (I wouldn't swear by it), the point is not whether or not everyone can use the particular version of make I want them to use. It's whether or not the version of make they actually do use is compatible with my Makefile. That's why Java has Ant. That's why Ruby has Rake. That's why Perl has Module::Build. That's why more and more open-source software projects are realizing that make doesn't cut it. Just because you think that GNU make is superior to Solaris make
Re:Ant does the job... (Score:2)
Re:Kumar? (Score:3, Informative)
Some how I think most /. would better associate with the later meaning of the word.
Re:Java is the real problem (Score:2)
Re:Not as good as MakeXS ... (Score:2)
Worse yet, make runs each task in a new shell, so you'll have many many shells being created and destroyed. If your project grows to any considerable extent, you'll soon see ant's solution of one shell (the JVM) as a lightweight so
Re:Where's the GUI? (Score:2)
Machining tools benefit from computer interfaces, screwdrivers do not. Yet I have never seen anyone open a can of paint with a machining tool, but the screwdriver is flexible enough in design to do this task, even though it was not specifically designed to do it.
GUIs are great in many aspects, but they can be just as limiting in others. Pick the right tool for the job. Your build system is probably not