Editor's Note: In Part 1 of this two-part excerpt from Ant: The Definitive Guide, 2nd Edition, Steve Holzner covered the tasks designed for packaging web applications, including war, cab, ear, and jspc. This week he covers the tasks for deploying web apps with get, serverdeploy, and scp.
With
a WAR file (or CAB file), it's time to turn to the
deployment side of the Web development equation. If
you're working on the same machine as a Web server,
deployment can be as easy as copying a .war file
to the application base directory for the server. Example 8-2 illustrates the point; this build file creates
and copies a .war file over to the Tomcat
webapps directory. When you (re)start Tomcat,
the .war file will expand automatically into a
directory of the same name (minus the .war
extension), and the Web application will become available, in this
case, at http://localhost:8080/app. (If
you're deploying a servlet, the URL will reflect the
servlet's package, as in http://localhost:8080/org/antbook/ch08/app
for the servlet class org.antbook.ch08.app.)
<?xml version="1.0" encoding = "UTF-8"?>
<project default="main" basedir=".">
<property name="src" location="source" />
<property name="wardir" location=
"c:/tomcat/jakarta-tomcat-5.0.19/webapps"/>
<property name="warfile" location="${wardir}/app.war"/>
<target name="main" depends="war">
<echo message="Deploying the Web app...."/>
</target>
<target name="war" >
<war destfile="${warfile}" webxml="${src}/app.xml" basedir="${bin}" />
</target>
</project>
You can use Ant's
ftp task (see Chapter 4) for
remote deployment to a Web server's base
directories.
Another
deployment task, available since Ant 1.6, is the
scp task, which copies a file or FileSet to or
from a remote machine running the SSH daemon. This task is an
optional one, and you need jsch.jar in the Ant
lib directory to use it (you can get
jsch.jar at http://www.jcraft.com/jsch/index.html).
This task is handy for deployment. For
example, here's how to deploy a single file to a
remote host (any host you connect to must be listed in your
knownhosts file unless you specifically set the
trust attribute to yes or true):
<scp file="Project.jar"
todir="user:password@antmegacorp.com:/home/steven/cgi-bin"/>
You can use the
password attribute explicitly to set the password:
<scp file="Project.jar"
todir="user@antmegacorp.com:/home/steven/cgi-bin""
password="password"/>
Here's how to copy a remote file to a local machine:
<scp file="user:password@antmegacorp.com:/home/steven/cgi-bin/Project.jar"
todir="${archive}"/>
Here's how to copy a set of files using a fileset:
<scp todir="user:password@antmegacorp.com:
/home/steven/source">
<fileset dir="${src}">
<include name="**/*.java"/>
</fileset>
</scp>
Example 8-3 gives a complete example build file using the
scp task for deployment. (It uses the remote
machine's IP address instead of naming the remote
server.)
<?xml version="1.0" ?>
<project default="main">
<property name="message" value="Deploying the .jar file." />
<property name="src" location="source" />
<property name="output" location="bin" />
<target name="main" depends="init, compile, compress, deploy">
<echo>
${message}
</echo>
</target>
<target name="init">
<mkdir dir="${output}" />
</target>
<target name="compile">
<javac srcdir="${src}" destdir="${output}" />
</target>
<target name="compress">
<jar destfile="${output}/Project.jar" basedir="${output}">
<include name="*.class"/>
<include name="*.txt"/>
</jar>
</target>
<target name="deploy">
<scp trust="true" file="${output}/Project.jar"
todir="user:password@000.000.000.000:cgi-bin"/>
</target>
</project>
Here's what that build file output looks like when run on a Windows machine:
%ant
Buildfile: build.xml
init:
[mkdir] Created dir: C:\ant\ch08\scp\bin
compile:
[javac] Compiling 1 source file to C:\ant\ch08\scp\bin
compress:
[jar] Building jar: C:\ant\ch08\scp\bin\Project.jar
deploy:
[scp] Connecting to 000.000.000.000
[scp] Sending: Project.jar : 664
[scp] File transfer time: 1.32 Average Rate: 9502.27 B/s
[scp] done.
main:
[echo]
[echo] Deploying the .jar file.
[echo]
BUILD SUCCESSFUL
Total time: 12 seconds
TIP: As discussed in Chapter 4, hardcoding passwords and/or usernames in a build file is a bad idea. It's better to use properties like this:
Pass the username and password to Ant like this:<scp todir="${username}:${password}@antmegacorp.com: /home/steven/source" ...>
Unix file permissions are not retained when files are copied with theant -Dusername=steven -Dpassword=opensesamescptask (they getUMASKpermissions). If you want to retain Unix permissions, execute the Unixscpcommand instead (i.e.,<execexecutable="scp" ... >).
The attributes of this task appear in Table 8-3.
|
Attribute |
Description |
Required |
Default |
|---|---|---|---|
|
|
Specifies whether you want to stop the build if the task encounters an error. |
No |
|
|
|
Specifies the file you want to transfer. You can give a local path or a remote path of the form user[:password]@host:/directory/path. |
Yes, unless a nested | |
|
|
Specifies the location of a file holding the private key you want to use. |
Yes, if you are using key-based authentication. | |
|
|
Specifies the known hosts file, which can be used to validate remote hosts. |
No |
${user.home}/.ssh/known_hosts. |
|
|
Specifies the passphrase for your private key. |
Yes, if you are using key-based authentication. | |
|
|
Specifies the password you want to use for logging in. |
No if you are using key-based authentication or the password has been given in the file or todir attribute. | |
|
|
Specifies the port you want to connect to on the remote host. |
No |
|
|
|
Specifies the directory you want to copy to. This can be a local path or a remote path of the form user[:password]@host:/directory/path. |
Yes | |
|
|
Specifies you want to trust all unknown hosts if set to yes/true. If set to false (the default), the host you connect to must be listed in your knownhosts file. |
No |
|
You
can use fileset elements to select sets of files
to copy; if you use a fileset, you must assign a value to the
todir attribute. (The fileset
element works only when you're copying files from
the local machine to a remote machine.)
|
Tomcat (available from http://jakarta.apache.org/tomcat/), the reference Web server for servlets and JSP, has become more attractive to Ant developers since it comes with custom Ant tasks for deployment. Copy the file server/lib/catalina-ant.jar from your Tomcat 5 installation into the lib directory of your Ant installation to use these tasks.
The Tomcat
deployment tasks are deploy,
reload, and undeploy; to use
them, add these taskdef elements (discussed in
Chapter 11) to your build file:
<taskdef name="deploy" classname="org.apache.catalina.ant.DeployTask"/>
<taskdef name="reload" classname="org.apache.catalina.ant.ReloadTask"/>
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask"/>
To use these
tasks, you'll need manager privileges with Tomcat;
edit conf/tomcat-users.xml to add manager
privileges for a username (admin here) and
password like this:
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="role1"/>
<role rolename="tomcat"/>
<user username="admin" password="password" roles="manager"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>
You can use the
deploy task to deploy a web application to Tomcat
from Ant like this:
<target name="install">
<deploy url="${manager.url}"
username="${manager.username}"
password="${manager.password}" path="${app.path}"
localWar="file://${build}"/>
</target>
Here, manager.url is
the URL of the Tomcat manager servlet. The default name for this
servlet is "manager", so this is
something like http://localhost:8080/manager. The
app.path property holds the context path at which
this application should be deployed (usually /
plus the name of the application as you want to use it in the URL to
access the application online). The build property
holds the location at which you build the Web application as it
should be installed in the Tomcat webapps
directory.
If you have installed an application
and want Tomcat to recognize you have updated Java classes, use the
reload task instead:
<target name="reload">
<reload url="${manager.url}"
username="${manager.username}"
password="${manager.password}"
path="${app.path}"/>
</target>
To remove a
Web application, use the undeploy task:
<target name="remove">
<undeploy url="${manager.url}"
username="${manager.username}"
password="${manager.password}"
path="${app.path}"/>
</target>
More often than not, you
won't be developing your applications on the same
server you want to deploy to. You can deploy to a Tomcat installation
running on a remote server by contacting the Tomcat manager servlet
via URL in a browser. To do that in Ant you use the
get task, which gets a file when you pass it a
URL. If you're using Java 1.4 or later, this task
supports any URL schema, including http:, ftp:,
jar:, and https:. This task is great if you want to
download online content, or, as in this case, issue commands via URLs
to online code.
Before getting to deployment, here's an example that
uses get to retrieve the Ant home page and stores
it in ant.html:
<get src="http://ant.apache.org/" dest="ant.html"/>
You can upload Web applications to Tomcat using the manager servlet, passing the local location of the Web application to upload. For example, to upload a Web application from C:/ant/ch08/app in Windows, you'd use this location:
file:////C:\ant\ch08\app/
To
upload a .war file, you add an
! at the end of the location to indicate
you're uploading a file, not the contents of a
directory, like this in Unix:
jar:file://///ant/ch08/app.war!/
Example 8-3 shows how this works
in practice. In this case, the build file deploys a Web application
from C:\ant\deploy\app that consists of a
servlet (org.antbook.ch08.Deploy) that displays
the message "Project Deployment!"
to Tomcat. Here's the URL you pass to the
get task to tell the Tomcat manager servlet what
you want to do:
http://localhost:8080/manager/deploy?path=/deployment&
war=file:////c:\ant\deploy\app/
You can see this at work in Example 8-4.
<?xml version="1.0" encoding="UTF-8" ?>
<project default="main" basedir=".">
<property name="tomcat.port" value="8080" />
<property name="tomcat.username" value="admin" />
<property name="tomcat.password" value="password" />
<target name="main" >
<get src="http://localhost:8080/manager/deploy?path=/deployment&
war=file:////c:\ant\deploy\app/"
dest="deploy.txt"
username="${tomcat.username}"
password="${tomcat.password}" />
</target>
</project>
Here's what the build file looks like in action:
%ant
Buildfile: build.xml
main:
[get] Getting: http://localhost:8080/manager/deploy?
path=/deployment&war=file:////c:\ant\ch08\get\app/
BUILD SUCCESSFUL
Total time: 1 second
Here's what Tomcat wrote to the output file, deploy.txt:
OK - Deployed application at context path /deployment
After deployment, navigating to http://localhost:8080/deployment/org.antbook.ch08.Deploy shows the deployed servlet, as seen in Figure 8-1.

Figure 8-1. Deploying to Tomcat
TIP: For more information on using the Tomcat manager servlet, look at manager/html-manager-howto.html in your Tomcat installation.
The
attributes of the get task appear in Table 8-4.
|
Attribute |
Description |
Required |
Default |
|---|---|---|---|
|
|
Specifies the file where you want to store the retrieved data. |
Yes | |
|
|
Specifies you want to only log errors instead of treating them as fatal. |
No |
|
|
|
Specifies the password to use when connecting. |
If | |
|
|
Specifies the URL where the data you want is. |
Yes | |
|
|
Specifies the username for BASIC http authentication. |
If | |
|
|
Specifies you want to download a file only after checking the timestamp of the local copy to ensure you don't overwrite a more recent version. |
No |
|
|
|
Specifies you want to see full information as this task executes. Set
to |
No |
|
TIP: When the
verboseoption is on, this task will display a dot (.) for every 100 KB received.
When deploying to servers, the
jspc task can be useful. This task runs the
JavaServer Pages compiler and turns JSP pages into Java source, which
you can compile with the javac task. Compiling JSP
pages supports fast invocation of JSP pages, deployment on servers
without the complete JDK, or lets you check the syntax of pages
without deploying them. By default, this task uses the Jasper JSP
compiler, which comes with Tomcat. Copy Tomcat's
jasper-compiler.jar and
jasper-runtime.jar files into the Ant
lib directory to use this task.
You'll need servlet.jar, which
comes with Tomcat, in the Ant lib directory.
For example, say you have this JSP page, greeting.jsp:
<HTML>
<HEAD>
<TITLE>Creating a Greeting</TITLE>
</HEAD>
<BODY>
<H1>Creating a Greeting</H1>
<%
out.println("Hello from JSP!"); //Display the greeting
%>
</BODY>
</HTML>
Example 8-5 shows how to compile this JSP into greeting.java.
<?xml version="1.0" ?>
<project default="main">
<property name="message" value="Compiling the JSP...." />
<property name="src" location="source" />
<property name="output" location="bin" />
<target name="main" depends="init, compile">
<echo>
${message}
</echo>
</target>
<target name="init">
<mkdir dir="${output}" />
</target>
<target name="compile">
<jspc srcdir="${src}"
destdir="${output}"
package="org.antbook.jsp"
verbose="9">
<include name="**/*.jsp" />
</jspc>
</target>
</project>
Here's what you see when you run the build file:
%ant
Buildfile: build.xml
init:
compile:
[jspc] Compiling 1 source file to
/home/steven/ant/ch08/jspc/bin/org/antbook/jsp
[jasperc] 2004-06-30 02:20:09 - Class name is: greeting
[jasperc] 2004-06-30 02:20:09 - Java filename is:
/home/steven/ant/ch08/jspc/bin/org/antbook/jsp/greeting.java
[jasperc] 2004-06-30 02:20:09 - Accepted
org.apache.jasper.compiler.Parser$Scriptlet at /greeting.jsp(7,4)
[jasperc] 2004-06-30 02:20:09 - Compiling with: -encoding UTF8
main:
[echo]
[echo] Compiling the JSP....
[echo]
BUILD SUCCESSFUL
Total time: 3 seconds
And this is what the resulting Java code, greeting.java, looks like:
package org.antbook.jsp.;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import org.apache.jasper.runtime.*;
public class greeting extends HttpJspBase {
static {
}
public greeting( ) {
}
private static boolean _jspx_inited = false;
public final void _jspx_init( )
throws org.apache.jasper.runtime.JspException {
}
public void _jspService(HttpServletRequest request, HttpServletResponse
response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
.
.
.
out.println("Hello from JSP!"); //Display the greeting
.
.
.
}
}
Here's another example,
which compiles JSP pages, checks the dependencies, and uses the
javac task to create the actual bytecode for this
JSP:
<jspc
destdir="temp"
srcdir="${src}"
package="org.antbook.ch08">
<include name="**/*.jsp" />
</jspc>
<depend
srcdir="temp"
destdir="${bin}"
classpath="lib/app.jar"/>
<javac
srcdir="temp"
destdir="${bin}"
classpath="lib/app.jar" />
You can see the attributes of the jspc task in
Table 8-5.
|
Attribute |
Description |
Required |
Default |
|---|---|---|---|
|
|
Specifies the classpath to use when you're running
the JSP compiler. You can specify this by nested
|
No | |
|
|
Specifies the classpath to use when you're running the JSP compiler, by reference. |
No | |
|
|
Specifies the classname of a JSP compiler, such as
|
No |
|
|
|
Specifies the classpath that should be used to find the compiler
specified by the |
No | |
|
|
Specifies where you want to place the compiled files. |
Yes | |
|
|
Specifies if the task to fail if it encounters an error. |
No |
|
|
|
Specifies the Java Plugin class ID for Internet Explorer. |
No | |
|
|
Specifies you want to generate separate write statements for each HTML line in the JSP. Set to true/false. |
No | |
|
|
Specifies the name of the destination package for the generated compiled classes. |
No | |
|
|
Specifies where you want the task to look for source JSP files. |
Yes | |
|
|
Specifies the base URI for relative URI references in JSP pages. |
No | |
|
|
Sets the root directory from which URIs should be resolved. |
No | |
|
|
Specifies you want full (verbose) output. Set to an integer value (0-9). |
No |
|
|
|
Specifies the filename for the section of web.xml that details any servlets. |
No | |
|
|
Specifies the filename for the generated web.xml-type file. |
No |
The jspc task is
a directory-based task, so the JSP files to be compiled are located
the same way as the javac task locates files,
which means you can use nested elements, such as
includes and excludes. You can
use nested classpath and
classpathref elements, as well as nested
webapp elements. The webapp
element, unique to the jspc task, instructs the
JSP compiler to build an entire Web application. The one attribute of
the webapp element is the
basedir attribute, which sets the base directory
of the application. The base directory must have a
WEB-INF subdirectory beneath it. If you use this
element, the task uses the compiler for all dependency checking.
Here's an example using
webapp:
<jspc
package="org.antbook.ch08">
<include name="**/*.jsp" />
<webapp basedir="${ch08}" />
</jspc>
Fundamentally, deploying to Enterprise JavaBean (EJB) application servers is similar to other Ant deployment projects you've seen. You can use the tasks covered to package and deploy EJB applications. For example, you can see a build file developed for the JBoss server in Example 8-6; this build file first creates a .war file and then packages it into an .ear file for deployment.
<?xml version="1.0" ?>
<project default="main" basedir=".">
<target name="main" depends="init, compile, war, ear"/>
<target name="init">
<property name="src" value="${basedir}/src"/>
<property name="bin" value="${basedir}/output"/>
<property name="web" value="${basedir}/web"/>
<property name="descriptors"
value="${basedir}/output/deploymentdescriptors"/>
<property name="eardir" value="${basedir}/output/ear"/>
<property name="wardir" value="${basedir}/output/war"/>
<property name="warfile" value="app.war"/>
<property name="earfile" value="app.ear"/>
<mkdir dir="${wardir}/WEB-INF"/>
<mkdir dir="${wardir}/WEB-INF/classes"/>
<mkdir dir="${eardir}/META-INF"/>
</target>
<target name="compile">
<javac destdir="${bin}" srcdir="${src}" includes="**/*.java" />
</target>
<target name="war">
<copy todir="${wardir}">
<fileset dir="${web}" includes="**/*.*" /> </copy>
<copy file="${descriptors}/web.xml" todir="${wardir}/WEB-INF" />
<copy todir="${wardir}/WEB-INF/classes">
<fileset dir="${bin}" includes="**/*.class" /> </copy>
<jar jarfile="${eardir}/${warfile}" basedir="${wardir}" />
</target>
<target name="ear">
<copy file="${descriptors}/application.xml"
todir="${eardir}/META-INF" />
<jar jarfile="${basedir}/${earfile}" basedir="${eardir}" />
</target>
</project>
That's all it takes. Though this build file gets the
job done using standard Ant tasks, tasks built into Ant make it
easier to work with EJB applications, starting with the
ear task.
The
ear task is handy for creating
.ear files and makes special provisions for the
application.xml file needed in most EARs.
It's not mandatory to use this task to create a
.ear file, but it can make life easier. You can
see the attributes of this task in Table 8-6.
TIP: The
eartask is an extension of the Jar task with special treatment for application.xml. You can perform the same operation by using theprefixandfullpathattributes of zipfilesets in aziporjartask.
|
Attribute |
Description |
Required |
Default |
|---|---|---|---|
|
|
Specifies the deployment descriptor you want to use, such as application.xml. |
Yes, unless | |
|
|
Specifies the directory from which to get the files. |
No | |
|
|
Indicates you want to not only store data but compress it. |
No |
|
|
|
Specifies if you want to use default excludes or not. Set to
|
No |
Default excludes are used. |
|
|
Specifies the EAR file you want to create. |
Yes | |
|
|
Specifies what to do if a duplicate file is found. Valid values are
|
No |
|
|
|
Specifies the character encoding to use for filenames in the EAR file. |
No |
|
|
|
Specifies the patterns matching files to exclude, as a comma- or space-separated list. |
No | |
|
|
Specifies the name of a file where each line is a pattern matching files to exclude. |
No | |
|
|
Specifies you want to store only file entries. |
No |
|
|
|
Specifies the patterns matching files to include, as a comma- or space-separated list. |
No | |
|
|
Specifies the name of a file where each line is a pattern matching files to include. |
No | |
|
|
Preserves the compression as it has been in archives you're compressing instead of using the compress attribute. Available since Ant 1.6. |
No | |
|
|
Specifies the manifest file to use in the compressed file. |
No | |
|
|
Specifies whether you want to update or overwrite the target file if it exists. |
No |
|
The extended
zipfileset element from the zip
task, which supports the attributes prefix,
fullpath, and src, is available
in the ear task. The nested
metainf element specifies a fileset; all files
included in this fileset will end up in the
META-INF directory of the
.ear file.
This task lets you specify where to get
application.xml from, using the
appxml attribute. Here's an
example that creates an .ear
file:
<ear destfile="${output}/app.ear" appxml="${src}/application.xml">
<fileset dir="${wardir}" includes="*.war"/>
</ear>
The serverdeploy task
is designed to support hot deployment (where you
don't have to take the server down before deploying)
to EJB-aware servers. You set the action attribute
to values you've seen, like those used for the
Tomcat manager servlet: "deploy",
"delete", and
"undeploy".
TIP: You'll need vendor-specific deployment software to make this one work. Ant provides the build-end, but your server will need to provide a deployment facility that Ant can connect and interact with.
As of this writing, this task only supports Weblogic servers and the JOnAS 2.4 Open Source EJB server, but support for other EJB containers should be added soon. This task has only two attributes, which appear in Table 8-7, and requires some nested elements.
|
Attribute |
Description |
Required |
|---|---|---|
|
|
Specifies the action you want to perform, such as
|
Yes |
|
|
Specifies the path and filename of the component you want to deploy. This may be an .ear, .jar, .war, or other file type supported by the server. |
Depends on the server. |
The serverdeploy task
supports a nested classpath element to set the
classpath. It supports the vendor-specific
generic, jonas, and
weblogic nested elements.
This is the element you use for generic
Java-based deployment if you've got deployment codea
Java classsupplied by the server's vendor. If
there's a vendor-specific element for
serverdeploy, use that, of course, but if not, try
the generic element. The attributes of this
element appear in Table 8-8.
|
Attribute |
Description |
Required |
|---|---|---|
|
|
Specifies the classname of the deployment tool you want to run. |
Yes |
|
|
Specifies the classpath you want the JVM running the tool to use. May be supplied as a nested element. |
Depends on the server. |
|
|
Specifies the password you want to use on the server. |
Depends on the server. |
|
|
Specifies the URL of the server to use. |
Depends on the server. |
|
|
Specifies the username to log in with. |
Depends on the server. |
The generic element
supports nested arg and jvmarg
elements. Here's an example using the
generic element for deployment that assumes the
deployment tool for the target Web server is
org.steven.j2ee.config.Deploy:
<serverdeploy action="deploy" source="${eardir}/app.ear">
<generic classname="org.steven.j2ee.config.Deploy"
classpath="${classpath}"
username="${user.name}"
password="${user.password}">
<arg value="-install"/>
<jvmarg value="-mx512m"/>
</generic>
</serverdeploy>
The
weblogic element is designed to run the
weblogic.deploy deployment tool; legal actions for
this tool are deploy, undeploy,
list, update, and
delete. The attributes for this element appear in
Table 8-9.
|
Attribute |
Description |
Required |
Default |
|---|---|---|---|
|
|
Specifies the name of the application you want to deploy. |
Yes | |
|
|
Specifies the classname of the deployment tool you want to run. |
No | |
|
|
Specifies the string for deployment targets, of the form:
|
No | |
|
|
Specifies if you want debug information to be displayed during deployment. |
No | |
|
|
Specifies the password you want to use on the server. |
Yes | |
|
|
Specifies the URL of the server to use. |
No | |
|
|
Specifies the username to log in with. |
No |
|
Here's an example using
this element inside a serverdeploy element to
deploy to a WebLogic server:
<serverdeploy action="deploy" source="${eardir}/app.ear">
<weblogic application="app"
server="ff19://server:7001"
classpath="${weblogic.home}/lib/weblogic.jar"
username="${user.name}"
password="${user.password}"
component="appserver,productionserver" />
</serverdeploy>
The jonas element
supports deployment to JOnAS (Java Open Applicaton Server) servers.
Valid actions for the JOnAS deployment tool
(org.objectweb.jonas.adm.JonasAdmin
)
are deploy,
undeploy, list and
update. The attributes of this element appear in
Table 8-10.
|
Attribute |
Description |
Required |
Default |
|---|---|---|---|
|
|
Specifies the root directory for the server. |
Yes | |
|
|
Specifies the orb, such as RMI, JEREMIE, DAVID, and so on. If the orb
is DAVID (RMI/IIOP), specifies the |
No |
The ORB present in the classpath. |
|
|
Specifies the value for the property
|
No | |
|
|
Specifies the value for the property
|
No | |
|
|
Specifies the classname of the deployment tool you want to run. |
No |
|
|
|
Specifies the classpath you want the JVM running the tool to use. May be supplied as a nested element. |
No | |
|
|
Specifies the URL of the server to use. |
Yes |
TIP: If you want to build in delay times to take into account delays in getting responses from a server, use the Ant
waitfortask. You can use thesleeptask for this purpose.
The jonas element
supports nested classpath, arg,
and jvmarg elements. Here's an
example using serverdeploy to deploy to a JOnAS
server:
<serverdeploy action="deploy" source="${eardir}/app.jar">
<jonas server="JOnAS5" jonasroot="${jonas.root}">
<classpath>
<pathelement path="${jonas.root}/lib/RMI_jonas.jar"/>
</classpath>
</jonas>
</serverdeploy>
Steve Holzner is the author of O'Reilly's upcoming Eclipse: A Java Developer's Guide.
Return to ONJava.com.
Copyright © 2009 O'Reilly Media, Inc.