Ant: The Definitive Guide, 2nd Edition
|
8.4. Deploying with SCP
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.) Example 8-3. Using scp (ch08/scp/build.xml)
<?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
The attributes of this task appear in Table 8-3.
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.) |
|