这里介绍,如何通过本地编写代码,通过Ant构建部署在远程服务器上并直接运行。
eclipse需要额外的jar包。jsch-0.1.54.jar,如何添加这个插件,可以参考这里。
编写本地代码:
这里准备一个java类,用来简单测试,获取操作系统名称并打印出来。代码很简单,如下:
package com.xxx.ant;
public class GetOS {
public static void main(String[] args) {
String os = System.getProperty("os.name");
System.out.println(os);
}
}
接下来,我们准备构建的xml文件,这里给出build2.xml文件的全部内容。
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." name="ant" default="sshexec">
<property name="main.class" value="com.xxx.ant.GetOS"/>
<property name="src.dir" value="${basedir}/src" />
<property name="java.lib.dir" value="${basedir}/lib"/>
<property name="localpath.dir" value="${basedir}"/>
<property name="dest.dir" value="${basedir}/dest"/>
<property name="classes.dir" value="${basedir}/classes"/>
<property name="third.lib.dir" value="${basedir}/lib"/>
<property name="remote.host" value="10.119.9.149"/>
<property name="remote.username" value="root"/>
<property name="remote.password" value="root"/>
<property name="remote.home" value="~"/>
<path id="compile.classpath">
<fileset dir="${java.lib.dir}">
<include name="tools.jar"/>
</fileset>
<fileset dir="${third.lib.dir}">
<include name="*.jar"/>
</fileset>
</path>
<path id="run.classpath">
<path refid="compile.classpath"/>
<pathelement location="${classes.dir}" />
</path>
<target name="clean">
<delete dir="${classes.dir}"/>
<delete dir="${dest.dir}"/>
<echo level="info">清理完毕</echo>
</target>
<target name="init" depends="clean">
<mkdir dir="${classes.dir}"/>
<mkdir dir="${dest.dir}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}" source="1.8" target="1.8" includeAntRuntime="false" debug="false" verbose="false" encoding="UTF-8">
<classpath refid="compile.classpath"/>
</javac>
</target>
<target name="build" depends="compile">
<jar jarfile="${dest.dir}/getos.jar">
<fileset dir="${classes.dir}" includes="**/*.*"/>
</jar>
</target>
<target name="ssh" depends="build">
<scp file="${dest.dir}/getos.jar" todir="${remote.username}@${remote.host}:${remote.home}" password="${remote.password}" trust="true"/>
</target>
<target name="sshexec" depends="ssh">
<sshexec host="${remote.host}" username="${remote.username}" password="${remote.password}" trust="true" command="java -cp ${remote.home}/getos.jar ${main.class}"/>
</target>
</project>
这是一个普通的构建脚本:在构建之前,先是清理以前的构建内容,避免受影响,然后初始化操作,生成需要的文件夹classes,dest,接着是编译java文件,然后生成class,将生成的class文件再打jar包。本来打完jar包,按照一般的流程,这里就是结束了,接下来,我们就是需要将jar包拷贝到linux服务器上执行,这类用了ant构建插件的ssh任务和sshexe任务,直接将jar包通过scp的方式拷贝到了linux,然后,运行java命令,执行com.xxx.ant.GetOS这个类。
运行之前,做个对比,本地运行结果,打印Windows 7:
运行:右键build2.xml ->Run As->Ant Build
控制台查看构建结果(日志中间省略打印类路径信息):
构建成功,并且打印了os.name为Linux。
远程服务器在构建前后的对比,并且我们也可以验证在linux远程服务器下运行获取os.name是否为Linux:
构建过程,按照build.xml中定义的任务依赖关系,首先是清理(如果以前构建过),初始化,编译,构建,ssh拷贝jar包,sshexec运行linux命令。