From 2cf07cb48f49100dccab3e122800cb295008331b Mon Sep 17 00:00:00 2001 From: Jan Materne Date: Wed, 31 May 2006 16:28:20 +0000 Subject: [PATCH] Some more statements about the basic statements. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@410582 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/tutorial-HelloWorldWithAnt.html | 92 ++++++++++++++++++--- 1 file changed, 80 insertions(+), 12 deletions(-) diff --git a/docs/manual/tutorial-HelloWorldWithAnt.html b/docs/manual/tutorial-HelloWorldWithAnt.html index d079ded23..61ea5ba44 100644 --- a/docs/manual/tutorial-HelloWorldWithAnt.html +++ b/docs/manual/tutorial-HelloWorldWithAnt.html @@ -28,7 +28,6 @@ to let you see, how to do the easiest steps in Ant.

-

Preparing the project

We want to separate the source from the generated files, so our java source files will @@ -42,8 +41,8 @@ directory. (Because I am working on Windows, here is the win-syntax - translate md src -

This is not a Java tutorial, so just write this code into src/oata/HelloWorld.java - -you should guess it's meaning ;-)

+

The following simple Java class just prints a fixed message out to STDOUT, +so just write this code into src\oata\HelloWorld.java.

 package oata;
@@ -55,18 +54,40 @@ public class HelloWorld {
 }
 
+

Now just try to compile and run that: +

+md build\classes
+javac -sourcepath src -d build\classes src\oata\HelloWorld.java
+java -cp build\classes oata.HelloWorld
+
+which will result in +
+Hello World
+
+

+ +

Creating a jar-file is not very difficult. But creating a startable jar-file needs more steps: create a +manifest-file containing the start class, creating the target directory and archiving the files.

+
+echo Main-Class: oata.HelloWorld>mf
+md build\jar
+jar cfm build\jar\HelloWorld.jar mf -C build\classes .
+java -jar build\jar\HelloWorld.jar
+
+ +

Four steps to a running application

-

Oki-doki - now we have to think about our build process. We have to compile our code, otherwise we couldn't +

After finishing the java-only step we have to think about our build process. We have to compile our code, otherwise we couldn't start the program. Oh - "start" - yes, we could provide a target for that. We should package our application. Now it's only one class - but if you want to provide a download, no one would download several hundreds files ... -(think about a complex Swing GUI :) - so let us create a jar file. A startable jar file would be nice ... And it's a +(think about a complex Swing GUI - so let us create a jar file. A startable jar file would be nice ... And it's a good practise to have a "clean" target, which deletes all the generated stuff. Many failures could be solved just -by a "clean build" :-)

+by a "clean build".

-

The buildfile describing that would be:

+

By default Ant uses build.xml as the name for a buildfile, so our build.xml would be:

 <project>
 
@@ -106,12 +127,59 @@ ant run
 ant compile jar run
 
+

While having a look at the buildfile, we will see some similar steps between Ant and the java-only commands: + + + + + + + + +
java-onlyAnt
+md build\classes
+javac 
+    -sourcepath src 
+    -d build\classes 
+    src\oata\HelloWorld.java
+echo Main-Class: oata.HelloWorld>mf
+md build\jar
+jar cfm 
+    build\jar\HelloWorld.jar 
+    mf 
+    -C build\classes 
+    .
+
+
+
+java -jar build\jar\HelloWorld.jar
+  
+<mkdir dir="build/classes"/>
+<javac 
+    srcdir="src" 
+    destdir="build/classes"/>
+<!-- automatically detected -->
+<!-- obsolete; runtime via manifest tag -->
+<mkdir dir="build/jar"/>
+<jar 
+    destfile="build/jar/HelloWorld.jar" 
+    
+    basedir="build/classes">
+    <manifest>
+        <attribute name="Main-Class" value="oata.HelloWorld"/>
+    </manifest>
+</jar>
+<java jar="build/jar/HelloWorld.jar" fork="true"/>
+  
+

+

Enhance the build file

-

Ok, the build works - but it is not as nice as it should: many time you are referencing the same directories, -main-class and jar-name are hard coded, and while invocation you have to remember the right order of build steps.

+

Now we have a working buildfile we could do some enhancements: many time you are referencing the +same directories, main-class and jar-name are hard coded, and while invocation you have to remember +the right order of build steps.

The first and second point would be addressed with properties, the third with a special property - an attribute of the <project>-tag and the fourth problem can be solved using dependencies.

@@ -157,7 +225,7 @@ of the <project>-tag and the fourth problem can be solved using dependenci </project> -

Now it's easier, just do a ant and you will get

+

Now it's easier, just do a ant and you will get

 Buildfile: build.xml
 
@@ -183,11 +251,11 @@ BUILD SUCCESSFUL
 
 

Using external libraries

Somehow told us not to use syso-statements. For log-Statements we should use a Logging-API - customizable on a high -degree (including switching off during usual life (= not development) execution). We use Log4J, because