项目进入到关键的集成测试阶段,我负责的后台有两块需要跟其他系统联调。其中有一块是要提供一个Jar包给工作流系统调用。部署起来还真是挺麻烦的,用Ant打Jar包,上传到SFTP服务器,授权,遇到问题修改代码,再打包,再上传,再授权。。。
来回了数次后,我烦了,难道就没有一步到位的方法,遂研究了一下Ant。之前对于Ant的了解仅限于知道Project,Target,Task的概念。
也就熟悉常用的那几个任务,什么编译啊,复制删除啊,打包啊等等。我想当然的以为,Ant迟早要被Maven替代,故而对它有所轻视。真是无知啊,看看人家Ant是怎么上传本地文件到远程服务器,执行远程命令吧!
<target name="deploy-qa" depends="jar-qa">
<scp todir="${username}:${password}@sghapp09:/tmp/dist_qa" sftp="true" >
<fileset dir="${dist}">
<exclude name="lib/*"/>
</fileset>
</scp>
<sshexec host="sghapp09"
username="${username}"
keyfile="${security}/qa.openssh"
passphrase=""
command="chmod 777 -R ${qa}/Target.jar ${qa}/config/* ${qa}/lib/* ${qa}/security/* "/>
</target>
1、SCP
通过一个SSH守护进程拷贝一个文件或一组文件到远程计算机上。
http://ant.apache.org/manual/Tasks/scp.html
基本语法上面的链接说得很清楚,我就不废话了。
如果在Eclipse里运行的话,需要注意一点。
因为SFTP需要额外的安全设置,所以需要引用一个Jar包 jsch
不然你很可能收到如此报错:
Could not load a dependent class com/jcraft/jsch/UserInfo
It is not enough to have Ant's optional JARs
you need the JAR files that the optional tasks depend upon.
Ant's optional task dependencies are listed in the manual.
Action: Determine what extra JAR files are needed, and place them in one of:
-C:\Dev\Software\eclipse-jee-helios-win32\eclipse\plugins\org.apache.ant_1.7.1.v20100518-1145\lib
-C:\Documents and Settings\bilong\.ant\lib
-a directory added on the command line with the -lib argument
Eclipse 太傻了,把包复制进去了,它不自动识别,非要我在 Preferences 设置一下。
在Window > Preferences > Ant > Runtime > Classpath (tab) 进行设置。
如果直接在外面运行,则需要把jar包拷贝到ant.home 下的lib 目录。
2、SSHEXEC
通过一个SSH守护进程在远程机器上运行命令。
http://ant.apache.org/manual/Tasks/sshexec.html
Linux 服务器上权限卡得很死,每次传完新文件后,如果不授权,很多东西就跑不起来,每次都要chmod 一下,有时候一个不小心忘了,等于这次就白测了。还好有 SSHEXEC。
Ant脚本经这么一改造以后,部署起来就轻松很多了,双击一下,一步到位,然后吆喝一声,兄弟们开测了。。。
还有可以继续改进的地方,加入SCM,直接从SVN上取最新版本编译发布。