Date: 2004-03-12T19:17:30
Editor: 203.121.47.163 <>
Wiki: Ant Wiki
Page: TheElementsOfAntStyle
URL: http://wiki.apache.org/ant/TheElementsOfAntStyle
no comment
Change Log:
------------------------------------------------------------------------------
@@ -68,7 +68,8 @@
==== 8. Provide the <?xml?> directive. ====
Include the encoding if there are characters outside the ASCII range:
-{{{ <?xml version="1.0" encoding="iso-8859-1"?> }}}
+{{{
+<?xml version="1.0" encoding="iso-8859-1"?> }}}
==== 9. Use consistent indentation. ====
Keep <project> at the very left edge, along with the <?xml ?> tag. Two or four
spaces is typical, no hard tabs. Keep closing elements aligned with opening
elements, as in <target> here:
@@ -88,7 +89,8 @@
One line also works for short begin and end pairs.
-{{{ <echo>build.dir = ${build.dir}</echo> }}}
+{{{
+ <echo>build.dir = ${build.dir}</echo> }}}
==== 11. Break up long lines. ====
Follow similar conventions as in your Java coding. Lines typically should not
be longer than 80 characters, although other considerations may lower this
limit. Break lines when they become longer than the limit, or readability would
be increased by breaking them. These guidelines assist in breaking long lines.
@@ -182,18 +184,18 @@
The following targets are common to many builds. Always avoid changing the
behavior of a well-known target name. You do not need to implement all of these
in a single project.
{{{
- '''all''' Build and test everything; create a distribution,
optionally install.
- '''clean''' Delete all generated files and directories.
- '''deploy''' Deploy the code, usually to a remote server.
- '''dist''' Produce the distributables.
- '''distclean''' Clean up the distribution files only.
- '''docs''' Generate all documentation.
- '''init''' Initialize the build: create directories, call
<tstamp> and other common actions.
- '''install''' Perform a local installation.
- '''javadocs''' Generate the Javadoc pages.
- '''printerdocs''' Generate printable documents.
- '''test''' Run the unit tests.
- '''uninstall''' Remove a local installation. }}}
+ all Build and test everything; create a distribution,
optionally install.
+ clean Delete all generated files and directories.
+ deploy Deploy the code, usually to a remote server.
+ dist Produce the distributables.
+ distclean Clean up the distribution files only.
+ docs Generate all documentation.
+ init Initialize the build: create directories, call <tstamp>
and other common actions.
+ install Perform a local installation.
+ javadocs Generate the Javadoc pages.
+ printerdocs Generate printable documents.
+ test Run the unit tests.
+ uninstall Remove a local installation. }}}
Never override a well-known target name with a different behavior, as then the
build file will behave unexpectedly to new users. For example, the docs task
should not install the system as a side effect, as that is not what is
expected.
@@ -234,7 +236,8 @@
==== 25. Load environment variables with ?env.? prefix. ====
-{{{ <property env="env"/> }}}
+{{{
+ <property env="env"/> }}}
The case of the properties loaded will be dependent upon the environment
variables, but they are typically uppercase: env.COMPUTERNAME, for example, is
the computer name on a Windows platform.
@@ -252,7 +255,8 @@
/> }}}
''lib.properties''
-{{{ xalan.jar=${lib.dir}/java/jakarta-xalan2/xalan.jar
+{{{
+ xalan.jar=${lib.dir}/java/jakarta-xalan2/xalan.jar
oro.jar=${lib.dir}/java/jakarta-oro/jakarta-oro-2.0.6.jar }}}
(submitted by Stephane Bailliez)
@@ -278,16 +282,16 @@
The following table lists directory names commonly found in Ant projects. The
build and dist directories should contain nothing in them that Ant cannot
build, so clean can clean up just by deleting them.
{{{
- '''build''' Temporarily used as a staging area for classes and
more.
- '''dist''' Distribution directory.
- '''docs''' Documentation files stored in their presentation
format.
- '''etc''' Sample files.
- '''lib''' Project dependencies, typically third party .jar
files.
- '''src''' Root directory of Java source code, package
directory structure below.
- '''src/xdocs''' Documentation in XML format, to be transformed into
presentation format during the build process.
- '''src/META-INF''' Metadata for the JAR file.
- '''web''' Root directory of web content (.html, .jpg, .JSP).
- '''web/WEB-INF''' Web deployment information, such as web.xml. }}}
+ build Temporarily used as a staging area for classes and more.
+ dist Distribution directory.
+ docs Documentation files stored in their presentation format.
+ etc Sample files.
+ lib Project dependencies, typically third party .jar files.
+ src Root directory of Java source code, package directory
structure below.
+ src/xdocs Documentation in XML format, to be transformed into
presentation format during the build process.
+ src/META-INF Metadata for the JAR file.
+ web Root directory of web content (.html, .jpg, .JSP).
+ web/WEB-INF Web deployment information, such as web.xml. }}}
The actual naming and placement of directories somewhat controversial, as many
different projects have their own historical preference. All good layouts tend
to have these features:
* Source files are cleanly split from generated files; Java class files are
never generated into the same directory as the source. This makes it much
easier to clean a project of all generated content, and reduces the risk of any
accidental destruction of source files.
@@ -348,7 +352,7 @@
<pathelement location="${jtidy.jar}"/>
</path> }}}
-''
+
==== 32. Define a usage target. ====
If your build file is used mostly by new users, having the default target
display usage information will help them get started.
@@ -368,7 +372,8 @@
==== 33. Alias target names to provide intuitive entry points. ====
For example, you may want to have a usage target but users would also type ant
help and expect assistance. An alias is simply an empty target which depends on
a non-empty target.
-{{{ <target name="help" depends="usage"/> }}}
+{{{
+ <target name="help" depends="usage"/> }}}
==== 34. Include an "all" target that builds it all. ====
This may not be your default target though. This target should at least create
all artifacts including documentation and distributable, but probably would not
be responsible for installation.
@@ -390,7 +395,9 @@
==== 36. Add an XSLT stylesheet to make build.xml browsable. ====
Right after the <?xml ... ?>, you can add a stylesheet reference, e.g.
-<?xml-stylesheet type="text/xsl" href="./ant2html.xsl"?>
+
+{{{
+<?xml-stylesheet type="text/xsl" href="./ant2html.xsl"?> }}}
Ant will ignore it, but if you open build.xml in a browser, it will show a
nicely formatted version of the script.
@@ -424,7 +431,8 @@
==== 40. Use location for directory and file references. ====
This results in the full absolute path being resolved and used for the
property value, rather than just the string (likely relative path) value.
-{{{ <property name="build.dir" location="build "/> }}}
+{{{
+ <property name="build.dir" location="build "/> }}}
==== 41. Handle creation and deletion of property referenced directories
individually. ====
Do not assume that hierarchically named properties refer to hierarchically
structured directories.
@@ -499,7 +507,8 @@
Setting properties differently depending on the server only requires a single
build file line.
-{{{ <property file="${server.name}.properties"/> }}}
+{{{
+ <property file="${server.name}.properties"/> }}}
The server.name property could be set at the command-line, set from the
environment (with some indirection from <property name="server.name"
value="${env.COMPUTERNAME}"/>), or from a previously loaded properties file.
@@ -584,8 +593,9 @@
=== Testing ===
==== 50. Write tests first! ====
-{{{ While not directly related to Ant, we find it important enough to say
whenever we can. }}}
-{{{ Corollary: if you can't do them first, do them second. }}}
+{{{
+ While not directly related to Ant, we find it important enough to say
whenever we can.
+ Corollary: if you can't do them first, do them second. }}}
==== 51. Standardize test case names. ====
Name test cases *Test.java. In the <junit> task use <fileset dir="${test.dir}"
includes="**/*Test.class"/>. The only files named *Test.java are test cases
that can be run with JUnit. Name helper classes something else.
@@ -614,7 +624,8 @@
During development, a single test case can be isolated and run from the
command-line:
-{{{ ant -Dtestcase=org.example.antbook.TroublesomeTest }}}
+{{{
+ ant -Dtestcase=org.example.antbook.TroublesomeTest }}}
==== 54. Fail builds when tests fail. ====
By default, the <junit> task does not halt a build when failures occur. If no
reporting is desired, enable haltonfailure and haltonerror. However, reporting
of test cases is often desired. To accomplish reporting of test failures and
failing the build together, borrow this example:
@@ -663,7 +674,8 @@
==== 56. Launch even native scripts in a cross-platform manner. ====
Disabling the vmlauncher setting of <exec> executes through Ant?s launcher
scripts in ANT_HOME/bin.
-{{{ <exec executable="script" vmlauncher="false" /> }}}
+{{{
+ <exec executable="script" vmlauncher="false" /> }}}
This will launch "script" on UNIX and "script.bat" on Windows OS's.
This assumes the UNIX script version does not have a suffix and the Windows
version has a supported suffix as defined in the PATHEXT environment variable.
This works because setting the vmlauncher attribute to false causes the command
to be executed through cmd.exe on Windows NT/2000/XP, antRun.bat on Windows 9x
and antRun on UNIX. Otherwise, with JVM's 1.3 and above, the command is
executed directly, bypassing any shell or command interpreter. (Submitted by
Bill Burton)
@@ -692,6 +704,7 @@
==== 59. Increase Ant's verbosity level. ====
By default, messages displayed to the console during Ant builds are only a
fraction of the messages generated by the Ant engine and tasks. To see all
logged output, use the -debug switch:
-{{{ ant -debug }}}
+{{{
+ ant -debug }}}
The -debug switch generates an enormous amount of output. A good compromise is
the -verbose switch, which outputs more than the default informational level of
output, but less than the debugging output.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]