﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-教父的告白-随笔分类-JAVA</title><link>http://www.cppblog.com/keigoliye/category/13472.html</link><description>一切都是纸老虎</description><language>zh-cn</language><lastBuildDate>Mon, 12 Apr 2010 16:16:39 GMT</lastBuildDate><pubDate>Mon, 12 Apr 2010 16:16:39 GMT</pubDate><ttl>60</ttl><item><title>使用Flex Ant Tasks编译工程文件</title><link>http://www.cppblog.com/keigoliye/archive/2010/04/12/112325.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Mon, 12 Apr 2010 07:08:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2010/04/12/112325.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/112325.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2010/04/12/112325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/112325.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/112325.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Flex&nbsp;ant&nbsp;tasks 提供了一种方便的手段使用工业标准级的构建工具来编译你的Flex工程。(The&nbsp;Flex&nbsp;Ant&nbsp;tasks provide a convenient way to build your&nbsp;Flex&nbsp;projects using an industry-standard build management...&nbsp;&nbsp;<a href='http://www.cppblog.com/keigoliye/archive/2010/04/12/112325.html'>阅读全文</a><img src ="http://www.cppblog.com/keigoliye/aggbug/112325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2010-04-12 15:08 <a href="http://www.cppblog.com/keigoliye/archive/2010/04/12/112325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一统天下，使用ANT构建VS.NET工程</title><link>http://www.cppblog.com/keigoliye/archive/2010/04/09/112079.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Fri, 09 Apr 2010 08:39:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2010/04/09/112079.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/112079.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2010/04/09/112079.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/112079.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/112079.html</trackback:ping><description><![CDATA[<span  style="color: rgb(79, 79, 79); font-family: Tahoma; font-size: 14px; line-height: 21px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">对VS.NET工程进行自动构建工作使用什么？也许大家会异口同声的说是NANT。嗯，NANT无疑是自动构建VS.NET工程最快捷的工具，但对于一个拥有多个编程语言环境的项目，使用专用版的ANT工具却并不是一个好的解决方案，试想，如果你的项目拥有多个由不同语言开发的模块，那么你可能会同时使用ANT、WANT、NANT来分别管理特定的模块。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">当然，这不是我们想看到的，同时维护三个构建工具实在不是什么明智之举（当然，如果你喜欢，那就无可厚非了），其实ANT已经为我们通吃所有语言环境准备好了精兵良驹。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">ANT的exec标签是用来执行一个系统命令，这样我们就可以使用开发工具的命令行编译方法来完成相应项目的自动构建工作。下面我们只介绍VS.NET工程的命令行编译方法：</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">VS.NET开发工具的命令行编译命令是devenv，当然前提是将VS.NET的IDE目录路径放置到PATH变量中。设置好PATH变量，在控制台中键入devenv /?，我们可以看到VS.NET的各个参数说明，如下：</div><p style="line-height: 1.2em; "></p><table cellspacing="0" cellpadding="0" border="1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-spacing: 1px; border-right-width: medium; border-right-style: none; border-right-color: initial; border-top-width: medium; border-top-style: none; border-top-color: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(230, 230, 230); border-left-width: medium; border-left-style: none; border-left-color: initial; border-bottom-width: medium; border-bottom-style: none; border-bottom-color: initial; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial; "><tbody><tr><td valign="top" width="568" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 426.1pt; padding-top: 0cm; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">Microsoft (R)&nbsp;</span><span style="font-size: 9pt; ">开发环境</span><span style="font-size: 9pt; ">&nbsp;7.10.3077&nbsp;</span><span style="font-size: 9pt; ">版。</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">版权所有</span><span style="font-size: 9pt; ">(C) Microsoft Corp 1984-2001</span><span style="font-size: 9pt; ">。保留所有权利。</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">用法</span><span style="font-size: 9pt; ">:</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">devenv&nbsp;[solutionfile | projectfile | anyfile.ext]&nbsp;[switches]</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">可以调用</span><span style="font-size: 9pt; ">&nbsp;devenv</span><span style="font-size: 9pt; ">，用第一个参数指定解决方案文件或项目文件。</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">也可以调用</span><span style="font-size: 9pt; ">&nbsp;devenv</span><span style="font-size: 9pt; ">，使第一个参数作为要在编辑器中打开的任何</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">其他类型的文件。如果提供项目文件，</span><span style="font-size: 9pt; ">IDE&nbsp;</span><span style="font-size: 9pt; ">将通过在与项目文件</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">相同的目录中查找与项目文件具有相同基名称的</span><span style="font-size: 9pt; ">&nbsp;.sln&nbsp;</span><span style="font-size: 9pt; ">文件，在</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">解决方案的上下文中打开该项目文件。如果存在</span><span style="font-size: 9pt; ">&nbsp;.sln&nbsp;</span><span style="font-size: 9pt; ">文件，则</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">IDE&nbsp;</span><span style="font-size: 9pt; ">将查找引用该项目的单个</span><span style="font-size: 9pt; ">&nbsp;.sln&nbsp;</span><span style="font-size: 9pt; ">文件。如果不存在这样的单</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">个</span><span style="font-size: 9pt; ">&nbsp;.sln&nbsp;</span><span style="font-size: 9pt; ">文件，则</span><span style="font-size: 9pt; ">&nbsp;IDE&nbsp;</span><span style="font-size: 9pt; ">将创建一个具有默认</span><span style="font-size: 9pt; ">&nbsp;.sln&nbsp;</span><span style="font-size: 9pt; ">文件名的未保</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">存的解决方案，而该默认文件名与项目文件具有相同的基名称。</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">命令行生成</span><span style="font-size: 9pt; ">:</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">devenv solutionfile.sln&nbsp;/build solutionconfig [ /project projectnameorfile [ /p</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">rojectconfig name ] ]</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">可用的命令行开关</span><span style="font-size: 9pt; ">:</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/build&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">生成指定的解决方案配置</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/project&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">指定生成项目而不是解决方案</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">必须指定</span><span style="font-size: 9pt; ">&nbsp;/build&nbsp;</span><span style="font-size: 9pt; ">才能使用</span><span style="font-size: 9pt; ">&nbsp;/project</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/projectconfig&nbsp;</span><span style="font-size: 9pt; ">指定要生成的项目配置</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">必须指定</span><span style="font-size: 9pt; ">&nbsp;/project&nbsp;</span><span style="font-size: 9pt; ">才能使用</span><span style="font-size: 9pt; ">&nbsp;/projectconfig</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/out&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">将生成结果写入指定的文件</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/rebuild&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">与</span><span style="font-size: 9pt; ">&nbsp;/build&nbsp;</span><span style="font-size: 9pt; ">类似，但先执行强制清理</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/clean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">清理生成结果</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/deploy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">生成指定的解决方案配置然后部署它</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/run&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">运行指定的解决方案配置</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/runexit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">运行指定的解决方案配置然后终止</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">启动后执行指定的内部命令行</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/mditabs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">使用选项卡式文档界面</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/mdi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">使用</span><span style="font-size: 9pt; ">&nbsp;MDI&nbsp;</span><span style="font-size: 9pt; ">界面</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/fn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">使用指定的字体名称</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/fs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">使用指定的字体大小</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/LCID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">使用指定的语言</span><span style="font-size: 9pt; ">&nbsp;ID</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/noVSIP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">禁用用于</span><span style="font-size: 9pt; ">&nbsp;VSIP&nbsp;</span><span style="font-size: 9pt; ">测试的</span><span style="font-size: 9pt; ">VSIP&nbsp;</span><span style="font-size: 9pt; ">开发人员许可证密钥</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/safemode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">出于稳定性仅加载默认的环境和服务</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/resetskippkgs&nbsp;</span><span style="font-size: 9pt; ">允许曾被标记为加载失败的</span><span style="font-size: 9pt; ">&nbsp;VsPackages</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">再次加载</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/migratesettings&nbsp;</span><span style="font-size: 9pt; ">迁移另一个版本中的某些用户设置</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">产品特定的开关</span><span style="font-size: 9pt; ">:</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/debugexe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">打开要调试的指定可执行文件。</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">命令行的其余部分作为它的参数</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">传递到此执行文件。</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">/useenv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">使用</span><span style="font-size: 9pt; ">&nbsp;PATH</span><span style="font-size: 9pt; ">、</span><span style="font-size: 9pt; ">INCLUDE</span><span style="font-size: 9pt; ">、</span><span style="font-size: 9pt; ">LIBPATH&nbsp;</span><span style="font-size: 9pt; ">和</span><span style="font-size: 9pt; ">&nbsp;LIB&nbsp;</span><span style="font-size: 9pt; ">环境变量</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; ">而不是使用</span><span style="font-size: 9pt; ">&nbsp;VC++&nbsp;</span><span style="font-size: 9pt; ">生成的</span><span style="font-size: 9pt; ">&nbsp;IDE&nbsp;</span><span style="font-size: 9pt; ">路径。</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; ">&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">若要从命令行附加调试器，请使用</span><span style="font-size: 9pt; ">:</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vs7jit.exe -p &lt;pid&gt;</span></div></td></tr></tbody></table><p style="line-height: 1.2em; "></p><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">可见VS.NET工具为我们提供了诸多支持命令行编译的参数，那接下来我们就开始动手配置Build.xml文件吧，为了节省篇幅，我这里只给出compile任务的代码：</div><p style="line-height: 1.2em; "></p><table cellspacing="0" cellpadding="0" border="1" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; word-spacing: 1px; border-right-width: medium; border-right-style: none; border-right-color: initial; border-top-width: medium; border-top-style: none; border-top-color: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(230, 230, 230); border-left-width: medium; border-left-style: none; border-left-color: initial; border-bottom-width: medium; border-bottom-style: none; border-bottom-color: initial; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial; "><tbody><tr><td valign="top" width="568" style="padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; width: 426.1pt; padding-top: 0cm; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">1&nbsp;&nbsp;&nbsp; &lt;target name="compile" depends="init"&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mkdir dir="${pdcu}"/&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="Compiling application main source..."/&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;delete file="${infofile}"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;exec dir="${pdir}\" executable="devenv" os="${build.os}" &gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;arg line=" ${pname}.sln</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /rebuild</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; release&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /useenv</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /out ${infofile}</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">12&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;/exec&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">13&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="Compiling application main source complete."/&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">14&nbsp;&lt;loadfile property="compiled-info"</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; srcFile="${infofile}"/&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;echo message="${compiled-info}"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">17&nbsp;&lt;condition property="compile-success"&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;and&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;contains string="${compiled-info}" substring="0&nbsp;</span><span style="font-size: 9pt; ">已失败</span><span style="font-size: 9pt; ">"/&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/and&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">21&nbsp;&nbsp;&nbsp; &lt;/condition&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">22&nbsp;&lt;fail unless="compile-success"</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; message="${compiled-info}"/&gt;</span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; "><span style="font-size: 9pt; ">24&nbsp;&nbsp;&nbsp; &lt;/target&gt;</span></div></td></tr></tbody></table><p style="line-height: 1.2em; "></p><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">我们来详细分析一下上面的代码。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">第1行是任务定义，在此不过多解释。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">2－4行是任务定义和准备工作，主要是建立编译生成目录和清理旧的输出文件。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">5－12行便是命令行编译的主要代码，我们来逐个解释。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">第5行定义了一个exec标签，用来调用devenv命令，并指定了编译所在当前目录dir属性，和操作系统信息os属性。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">从第6行开始则为devenv命令的参数部分。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">其中第6行指定了要编译的解决方案。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">第7行标明该解决方案要进行重新编译。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">第8行指定了编译类型为release模式。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">第9行指定编译器使用 PATH、INCLUDE、LIBPATH 和 LIB 环境变量。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">第10行指定了编译信息输出的文件位置。由于devenv命令执行完毕后，ANT无法从命令行获取编译信息，所以不能使用exec的output属性来指定输出位置（在调用Delphi编译器的时候，ANT可以正常获取编译信息，因此output属性有效），只能使用编译器所具有的参数功能将信息输出，该信息为判断编译成功与否的关键。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">14－15行读取了上述的编译信息文件的内容，以便之后判断编译是否成功。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">17－21行则定义了一个编译结果，用于判断编译是否成功。结果使用了contains属性来判断，如果输出文件中包含字符串&#8220;0 已失败&#8221;，则说明编译成功完成。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">22－23行则是指示了ANT，一旦编译失败，则打印出编译信息。</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; overflow-x: hidden; overflow-y: hidden; text-indent: 21pt; ">当然，这里只介绍了编译VS.NET工程的其中一种方法，在此抛砖引玉。既然ANT为我们提供了如此强大的系统命令执行功能，那么我们便可以在各种编程语言环境中游刃有余了。</div></span>
<img src ="http://www.cppblog.com/keigoliye/aggbug/112079.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2010-04-09 16:39 <a href="http://www.cppblog.com/keigoliye/archive/2010/04/09/112079.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Ant进行ssh和scp操作</title><link>http://www.cppblog.com/keigoliye/archive/2010/04/09/112076.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Fri, 09 Apr 2010 08:29:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2010/04/09/112076.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/112076.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2010/04/09/112076.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/112076.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/112076.html</trackback:ping><description><![CDATA[<span  style="border-collapse: collapse; font-family: song, Verdana; font-size: 12px; "><p style="font: normal normal normal 12px/normal song, Verdana; "><strong>一、简介：</strong><br style="font: normal normal normal 12px/normal song, Verdana; ">　　现在我们安装Linux的时候通常考虑到安全因素（默认情况下）是不打开telnet服务的，而ssh服务是有的，ant很早就支持telnet，但要求我们在Linux下要安装telnet-server,并要启用该服务。</p><p style="font: normal normal normal 12px/normal song, Verdana; ">还好自Ant1.60开始支持了SSH 及SCP 操作了，早在Ant之前若要支持SSH、SCP、SFTP等任务就必须下载j2ssh的j2ssh-ant.jar和j2ssh-core.jar（在<a href="http://www.sourceforge.net/" style="text-decoration: underline; color: rgb(0, 68, 182); "><font color="#0000ff">http://www.sourceforge.net</font></a>的j2ssh下有下载）。现在可以使用Ant提供的Sshexec和scp任务，由$ANT_HOME/lib/ant-jsch.jar提供支持，但是同样你也要在<a href="http://www.jcraft.com/jsch/index.html" style="text-decoration: underline; color: rgb(0, 68, 182); "><font color="#0000ff">http://www.jcraft.com/jsch/index.html</font></a>下载一个依赖包jsch-0.1.24.jar(文件名因版本而不同)，jsch同样也是<a href="http://www.sourceforge.net/" style="text-decoration: underline; color: rgb(0, 68, 182); "><font color="#0000ff">http://www.sourceforge.net</font></a>下的一个项目。</p><p style="font: normal normal normal 12px/normal song, Verdana; ">你需要把下载的jsch-0.1.24拷贝到$ANT_HOME/lib下，如果是Eclipse下的Ant环境必须在Window-&gt;Preferences-&gt;Ant-&gt;Runtime-&gt;Classpath中加入jsch-0.1.24。</p><p style="font: normal normal normal 12px/normal song, Verdana; ">JSch是一个SSH2的纯Java实现<br style="font: normal normal normal 12px/normal song, Verdana; ">JSch允许你连接到sshd server并采用端口映射， X11 映射; Scp文件传输等，你可以把集成JSch提供的功能到你自己的Java项目中，JSch 的授权方式为 BSD形式。</p><p style="font: normal normal normal 12px/normal song, Verdana; "><strong>二、简单例子：</strong><br style="font: normal normal normal 12px/normal song, Verdana; ">　　下面是用JSch完成Sshexec和scp两个任务的最简单例子，如果需要更详细的内容，请参考Ant用户手册</p><p style="font: normal normal normal 12px/normal song, Verdana; ">[Sshexec任务]<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;<font size="1"><font face="Courier"><font color="#ff0000">BR&gt;&lt;<strong><font color="#0000ff">target</font></strong>&nbsp;<strong><font color="#0000ff">name</font></strong><font color="#804040">=<font color="#dc009c">"sshexec"<font color="#ff0000">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">&lt;<strong><font color="#0000ff">sshexec</font></strong>&nbsp;<strong><font color="#0000ff">host</font></strong><font color="#804040">=<font color="#dc009c">"192.168.122.180"&nbsp;<strong><font color="#0000ff">username</font></strong><font color="#804040">=<font color="#dc009c">"root"&nbsp;&nbsp;<strong><font color="#0000ff">password</font></strong><font color="#804040">=<font color="#dc009c">"123456"<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color="#0000ff">trust</font></strong><font color="#804040">=<font color="#dc009c">"true"&nbsp;<strong><font color="#0000ff">command</font></strong><font color="#804040">=<font color="#dc009c">"cd&nbsp;/;ls"<strong><font color="#0000ff">/</font></strong><font color="#ff0000">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; "><font color="#ff0000">&lt;<strong><font color="#0000ff">/target</font></strong><font color="#ff0000">&gt;</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></p><p style="font: normal normal normal 12px/normal song, Verdana; ">注意上面的trust属性一般设置为true,　如果为默认值false时,那么就要求你所连接的host必须存在于你的knownhosts文件中，并且这个文件也必须是存在的，否则会出现 com.jcraft.jsch.JSchException: reject HostKey: 192.168.122.180异常。执行Linux下的命令时可以用分号";"把多个命令隔开，它们将会依次执行，而不需要写多个sshexec进行多次连接，每次连接只执行一个命令。</p><p style="font: normal normal normal 12px/normal song, Verdana; ">该任务的执行后输出结果如下：</p><p style="font: normal normal normal 12px/normal song, Verdana; "><font color="#000088">sshexec:<br style="font: normal normal normal 12px/normal song, Verdana; "></font>&nbsp;&nbsp;<font color="#0033ff">[</font><font color="#000088">sshexec</font><font color="#0033ff">] Connecting to 192.168.122.180:22<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; [</font><font color="#000088">sshexec</font><font color="#0033ff">] backup<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; [</font><font color="#000088">sshexec</font><font color="#0033ff">] bin<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; [</font><font color="#000088">sshexec</font><font color="#0033ff">] boot<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; [</font><font color="#000088">sshexec</font><font color="#0033ff">] dev<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; [</font><font color="#000088">sshexec</font>]&nbsp;<font color="#0033ff">etc<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; ...................</font></p><p style="font: normal normal normal 12px/normal song, Verdana; ">[scp任务]</p><p style="font: normal normal normal 12px/normal song, Verdana; ">1.拷贝单个文件到远端服务器<br style="font: normal normal normal 12px/normal song, Verdana; "><font size="1"><font face="Courier"><font color="#ff0000">&lt;</font><strong><font color="#0000ff">scp</font></strong>&nbsp;<strong><font color="#0000ff">file</font></strong><font color="#804040">=<font color="#dc009c">"c:/cmd.txt"&nbsp;<strong><font color="#0000ff">todir</font></strong><font color="#804040">=<font color="#dc009c">"root:123456@192.168.122.180:/tmp"&nbsp;<strong><font color="#0000ff">trust</font></strong><font color="#804040">=<font color="#dc009c">"true"<strong><font color="#0000ff">/</font></strong><font color="#ff0000">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; "><font color="#000000" size="2">或</font><br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;<strong><font color="#0000ff">scp</font></strong>&nbsp;<strong><font color="#0000ff">file</font></strong><font color="#804040">=<font color="#dc009c">"c:/cmd.txt"&nbsp;<strong><font color="#0000ff">todir</font></strong><font color="#804040">=<font color="#dc009c">"root@192.168.122.180:/tmp"&nbsp;<strong><font color="#0000ff">password</font></strong><font color="#804040">=<font color="#dc009c">"123456"&nbsp;<strong><font color="#0000ff">trust</font></strong><font color="#804040">=<font color="#dc009c">"true"<strong><font color="#0000ff">/</font></strong><font color="#ff0000">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; "></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font><br style="font: normal normal normal 12px/normal song, Verdana; ">2.拷贝远端文件本地<br style="font: normal normal normal 12px/normal song, Verdana; "><font size="1"><font face="Courier"><font color="#ff0000">&lt;</font><strong><font color="#0000ff">scp</font></strong>&nbsp;<strong><font color="#0000ff">file</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font size="1"><font face="Courier">"root:123456@192.168.122.180:/tmp/cmd.txt"&nbsp;<strong><font color="#0000ff">todir</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font size="1"><font face="Courier">"D:/my-app"&nbsp;&nbsp;<strong><font color="#0000ff">trust</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font size="1"><font face="Courier">"true"<strong><font color="#0000ff">/</font></strong></font></font><font color="#ff0000"><font face="Courier" size="1">&gt;</font></font></font></font></font></font></font></font></p><p style="font: normal normal normal 12px/normal song, Verdana; ">3.拷贝远端目录到本地，将以递归形式操作<br style="font: normal normal normal 12px/normal song, Verdana; "><font size="1"><font face="Courier"><font color="#ff0000">&lt;</font><strong><font color="#0000ff">scp</font></strong>&nbsp;<strong><font color="#0000ff">file</font></strong><font color="#804040">=<font color="#dc009c">"root:123456@192.168.122.180:/tmp/*"&nbsp;<strong><font color="#0000ff">todir</font></strong><font color="#804040">=<font color="#dc009c">"d:/my-app"&nbsp;<strong><font color="#0000ff">trust</font></strong><font color="#804040">=<font color="#dc009c">"true"<strong><font color="#0000ff">/</font></strong><font color="#ff0000">&gt;</font></font></font></font></font></font></font></font></font></p><p style="font: normal normal normal 12px/normal song, Verdana; ">4.拷贝本地目录中的内容到远端，递归形式，但不在服务器上建立my-app目录<br style="font: normal normal normal 12px/normal song, Verdana; "><font size="1"><font face="Courier"><font color="#ff0000">&lt;</font><strong><font color="#0000ff">scp</font></strong>&nbsp;<strong><font color="#0000ff">todir</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font size="1"><font face="Courier">"root:123456@192.168.122.180:/tmp/"&nbsp;<strong><font color="#0000ff">trust</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font face="Courier" size="1">"true"</font><font color="#ff0000"><font face="Courier" size="1">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;</font><font color="#ff0000"><font size="1"><font face="Courier">&lt;<strong><font color="#0000ff">fileset</font></strong>&nbsp;<strong><font color="#0000ff">dir</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font size="1"><font face="Courier">"d:/my-app"<strong><font color="#0000ff">/</font></strong></font></font><font color="#ff0000"><font face="Courier" size="1">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; "></font><font color="#ff0000"><font size="1"><font face="Courier">&lt;<strong><font color="#0000ff">/scp</font></strong></font></font><font color="#ff0000"><font face="Courier" size="1">&gt;</font></font></font></font></font></font></font></font></font></font></font></font></p><p style="font: normal normal normal 12px/normal song, Verdana; ">5.拷贝一系列的文件到远端，会建立相应的层次目录，不建立my-app目录<br style="font: normal normal normal 12px/normal song, Verdana; "><font size="1"><font face="Courier"><font color="#ff0000">&lt;</font><strong><font color="#0000ff">scp</font></strong>&nbsp;<strong><font color="#0000ff">todir</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font size="1"><font face="Courier">"root:123456@192.168.122.180:/tmp"&nbsp;<strong><font color="#0000ff">trust</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font face="Courier" size="1">"true"</font><font color="#ff0000"><font face="Courier" size="1">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;</font><font color="#ff0000"><font size="1"><font face="Courier">&lt;<strong><font color="#0000ff">fileset</font></strong>&nbsp;<strong><font color="#0000ff">dir</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font face="Courier" size="1">"d:/my-app"</font><font color="#ff0000"><font face="Courier" size="1">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#ff0000"><font size="1"><font face="Courier">&lt;<strong><font color="#0000ff">include</font></strong>&nbsp;<strong><font color="#0000ff">name</font></strong></font></font><font color="#804040"><font face="Courier" size="1">=</font><font color="#dc009c"><font size="1"><font face="Courier">"**/*.java"&nbsp;<strong><font color="#0000ff">/</font></strong></font></font><font color="#ff0000"><font face="Courier" size="1">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;</font><font color="#ff0000"><font size="1"><font face="Courier">&lt;<strong><font color="#0000ff">/fileset</font></strong></font></font><font color="#ff0000"><font size="1"><font face="Courier">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; "><font color="#ff0000">&lt;<strong><font color="#0000ff">/scp</font></strong><font color="#ff0000">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; "></font></font></font><font color="#000000" size="2">或<br style="font: normal normal normal 12px/normal song, Verdana; "><font size="1"><font color="#ff0000">&lt;</font><strong><font color="#0000ff">scp</font></strong>&nbsp;<strong><font color="#0000ff">todir</font></strong></font><font color="#804040"><font size="1">=</font><font color="#dc009c"><font size="1">"root:123456@192.168.122.180:/tmp"&nbsp;<strong><font color="#0000ff">trust</font></strong></font><font color="#804040"><font size="1">=</font><font color="#dc009c"><font size="1">"true"</font><font color="#ff0000"><font size="1">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;</font><font color="#ff0000"><font size="1">&lt;<strong><font color="#0000ff">fileset</font></strong>&nbsp;<strong><font color="#0000ff">dir</font></strong></font><font color="#804040"><font size="1">=</font><font color="#dc009c"><font size="1">"d:/my-app"&nbsp;<strong><font color="#0000ff">excludes</font></strong></font><font color="#804040"><font size="1">=</font><font color="#dc009c"><font size="1">"**/*.java"<strong><font color="#0000ff">/</font></strong></font><font color="#ff0000"><font size="1">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; "></font><font color="#ff0000"><font size="1">&lt;<strong><font color="#0000ff">/scp</font></strong></font><font color="#ff0000"><font size="1">&gt;<br style="font: normal normal normal 12px/normal song, Verdana; "></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font><br style="font: normal normal normal 12px/normal song, Verdana; ">最后一个任务的执行输出结果如下（其他略）：</p><p style="font: normal normal normal 12px/normal song, Verdana; ">scp:<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0033ff">[</font><font color="#001b88">scp</font><font color="#0033ff">]</font><font color="#0033ff">Connecting to 192.168.122.180:22<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] Sending: cmd.txt : 0<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] File transfer time: 0.0 Average Rate: ? B/s<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] Sending: pom.xml : 852<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] File transfer time: 0.0 Average Rate: &#8734; B/s<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] Sending: application.properties : 142<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] File transfer time: 0.0 Average Rate: &#8734; B/s<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] Sending: application.properties : 45<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] File transfer time: 0.0 Average Rate: &#8734; B/s<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] Sending: test.properties : 0<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] File transfer time: 0.02 Average Rate: 0.0 B/s<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] Sending: application.properties : 153<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] File transfer time: 0.0 Average Rate: &#8734; B/s<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] Sending: application.properties : 45<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] File transfer time: 0.0 Average Rate: &#8734; B/s<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [</font><font color="#001b88">scp</font><font color="#0033ff">] done.</font></p><p style="font: normal normal normal 12px/normal song, Verdana; "><strong><font color="#000000">三、其他例子：</font></strong></p><p style="font: normal normal normal 12px/normal song, Verdana; "><table cellspacing="0" style="height: 1082px; "><tbody><tr style="font: normal normal normal 12px/normal song, Verdana; "><td class="content" id="reply41395911_body" name="reply_body" csdnid="replyBody" style="font: normal normal normal 12px/normal song, Verdana; "><p style="font: normal normal normal 12px/normal song, Verdana; "><strong>例子1：</strong><br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;?xml &nbsp; version= "1.0 "?&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;project &nbsp; name= "buildssh " &nbsp; default= "DEFAULT " &nbsp; basedir= ". "&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;target &nbsp; name= "init "&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;!-- &nbsp; set &nbsp; properties, &nbsp; mkdir, &nbsp; etc. &nbsp; --&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;property &nbsp; file= "build.properties " &nbsp; /&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;property &nbsp; name= "this.project " &nbsp; value= "buildssh " &nbsp; /&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;echo &nbsp; message= "init &nbsp; in &nbsp; ${this.project} " &nbsp; /&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;tstamp &nbsp; /&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;/target&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; "><br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;target &nbsp; name= "DEFAULT " &nbsp; depends= "init "&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;echo &nbsp; message= "connecting &nbsp; to &nbsp; ${build.server} " &nbsp; /&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;sshexec &nbsp; host= "Linux &nbsp; server &nbsp; IP &nbsp; address " &nbsp; username= "Linux &nbsp; server &nbsp; &nbsp; username " &nbsp; password= "Linux &nbsp; server &nbsp; password " &nbsp; trust= "true " &nbsp; command= "Command &nbsp; you &nbsp; want &nbsp; to &nbsp; run &nbsp; on &nbsp; the &nbsp; server " &nbsp; /&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;/target&gt;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&lt;/project&gt;</p><p style="font: normal normal normal 12px/normal song, Verdana; "><strong>例子2：</strong><br style="font: normal normal normal 12px/normal song, Verdana; ">import &nbsp; com.jcraft.jsch.Channel; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">import &nbsp; com.jcraft.jsch.ChannelSftp; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">import &nbsp; com.jcraft.jsch.JSch; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">import &nbsp; com.jcraft.jsch.Session; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">import &nbsp; com.jcraft.jsch.UserInfo; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">public &nbsp; class &nbsp; ExecSCP &nbsp; { &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; static &nbsp; final &nbsp; UserInfo &nbsp; defaultUserInfo &nbsp; = &nbsp; new &nbsp; UserInfo(){ &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; String &nbsp; getPassphrase() &nbsp; { &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &nbsp; null; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; String &nbsp; getPassword() &nbsp; { &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &nbsp; null; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; boolean &nbsp; promptPassword(String &nbsp; arg0) &nbsp; { &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &nbsp; false; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; boolean &nbsp; promptPassphrase(String &nbsp; arg0) &nbsp; { &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &nbsp; false; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; boolean &nbsp; promptYesNo(String &nbsp; arg0) &nbsp; { &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return &nbsp; true; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; public &nbsp; void &nbsp; showMessage(String &nbsp; arg0) &nbsp; { &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; }; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; /** &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * &nbsp; @param &nbsp; args &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */ &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">public &nbsp; static &nbsp; void &nbsp; main(String[] &nbsp; args) &nbsp; throws &nbsp; Exception{&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">String &nbsp; hostname &nbsp; = &nbsp; "www.mozat.com ";&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">String &nbsp; username &nbsp; = &nbsp; "wiimii ";&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">String &nbsp; password &nbsp; = &nbsp; "jtev000 ";&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">String &nbsp; remoteFile &nbsp; = &nbsp; "Setup.ini ";&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">String &nbsp; localFile &nbsp; = &nbsp; "C:\\ ";&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; "><br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSch &nbsp; jsch=new &nbsp; JSch();&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; "><br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Session &nbsp; session=jsch.getSession(username, &nbsp; hostname, &nbsp; 990);&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; session.setPassword(password);&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; session.setUserInfo(defaultUserInfo);&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; session.connect();&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; "><br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Channel &nbsp; channel=session.openChannel( "sftp "); &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; channel.connect(); &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ChannelSftp &nbsp; c=(ChannelSftp)channel; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c.get(remoteFile, &nbsp; localFile); &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; session.disconnect();&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;<br style="font: normal normal normal 12px/normal song, Verdana; ">}&nbsp;</p></td></tr></tbody></table></p></span>
<img src ="http://www.cppblog.com/keigoliye/aggbug/112076.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2010-04-09 16:29 <a href="http://www.cppblog.com/keigoliye/archive/2010/04/09/112076.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux服务器下用ant实现SVN代码更新，部署</title><link>http://www.cppblog.com/keigoliye/archive/2010/04/09/112045.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Fri, 09 Apr 2010 03:23:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2010/04/09/112045.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/112045.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2010/04/09/112045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/112045.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/112045.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">这段<span class="hilite1" style="background-color: rgb(255, 255, 0); ">ant</span>脚本主要作用就是:自动从SVN库拉最新的代码，编译、并自动部署到测试服务器。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">其中用到了&#8220;antsvn&#8221; ，有3个jar包需要配置进去</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span  style="font-family: monospace; line-height: normal; font-size: 13px; white-space: pre; "><span style="color: rgb(0, 0, 255); ">&lt;?</span><span style="color: rgb(255, 0, 255); ">xml version="1.0" encoding="UTF-8"</span><span style="color: rgb(0, 0, 255); ">?&gt;</span><span style="color: rgb(0, 0, 0); ">

</span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); "> wei.songw 2008.3.19 </span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">

</span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">project </span><span style="color: rgb(255, 0, 0); ">basedir</span><span style="color: rgb(0, 0, 255); ">="."</span><span style="color: rgb(255, 0, 0); "> name</span><span style="color: rgb(0, 0, 255); ">="smmail"</span><span style="color: rgb(255, 0, 0); "> default</span><span style="color: rgb(0, 0, 255); ">="auto"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">  all properties are in build.properties </span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">property </span><span style="color: rgb(255, 0, 0); ">file</span><span style="color: rgb(0, 0, 255); ">="build.properties"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">svn本身需要的运行库 </span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">path </span><span style="color: rgb(255, 0, 0); ">id</span><span style="color: rgb(0, 0, 255); ">="svnant.lib"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">pathelement </span><span style="color: rgb(255, 0, 0); ">location</span><span style="color: rgb(0, 0, 255); ">="${svnjavahl.jar}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">pathelement </span><span style="color: rgb(255, 0, 0); ">location</span><span style="color: rgb(0, 0, 255); ">="${svnant.jar}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">pathelement </span><span style="color: rgb(255, 0, 0); ">location</span><span style="color: rgb(0, 0, 255); ">="${svnClientAdapter.jar}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">path</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">java EE 1.4 库 </span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">path </span><span style="color: rgb(255, 0, 0); ">id</span><span style="color: rgb(0, 0, 255); ">="javaEE1.4"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">fileset </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${javaEE1.4.lib}"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">include </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="**/*.jar"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">fileset</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">path</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">项目的classpath库 </span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">path </span><span style="color: rgb(255, 0, 0); ">id</span><span style="color: rgb(0, 0, 255); ">="project.classpath"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">pathelement </span><span style="color: rgb(255, 0, 0); ">location</span><span style="color: rgb(0, 0, 255); ">="${build.dir}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">fileset </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${lib.dir}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">path</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">清理项目任务(干掉下载目录，tomcat原来的部署文件) </span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">target </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="clear"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">delete </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${work.space}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">delete </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${tomcat.home}/work/Catalina/localhost/${ant.project.name}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">delete </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${tomcat.home}/webapps/${ant.project.name}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">delete </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${tomcat.home}/webapps/${ant.project.name}.war"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">target</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); "> load the svn task </span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">taskdef </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="svn"</span><span style="color: rgb(255, 0, 0); "> classname</span><span style="color: rgb(0, 0, 255); ">="org.tigris.subversion.svnant.SvnTask"</span><span style="color: rgb(255, 0, 0); "> classpathref</span><span style="color: rgb(0, 0, 255); ">="svnant.lib"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">svn同步任务</span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">target </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="svn"</span><span style="color: rgb(255, 0, 0); "> depends</span><span style="color: rgb(0, 0, 255); ">="clear"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">mkdir </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${work.space}"</span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">svn </span><span style="color: rgb(255, 0, 0); ">username</span><span style="color: rgb(0, 0, 255); ">="SongWei"</span><span style="color: rgb(255, 0, 0); "> password</span><span style="color: rgb(0, 0, 255); ">="Song"</span><span style="color: rgb(255, 0, 0); "> javahl</span><span style="color: rgb(0, 0, 255); ">="false"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">checkout </span><span style="color: rgb(255, 0, 0); ">url</span><span style="color: rgb(0, 0, 255); ">="${urlRepos}"</span><span style="color: rgb(255, 0, 0); "> destPath</span><span style="color: rgb(0, 0, 255); ">="${work.space}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">svn</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">target</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">编译</span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">target </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="compile"</span><span style="color: rgb(255, 0, 0); "> depends</span><span style="color: rgb(0, 0, 255); ">="svn"</span><span style="color: rgb(255, 0, 0); "> description</span><span style="color: rgb(0, 0, 255); ">="======compile project======"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">echo </span><span style="color: rgb(255, 0, 0); ">message</span><span style="color: rgb(0, 0, 255); ">="compile==========&gt;${ant.project.name}: ${ant.file}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">mkdir </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${build.dir}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">copy </span><span style="color: rgb(255, 0, 0); ">includeemptydirs</span><span style="color: rgb(0, 0, 255); ">="false"</span><span style="color: rgb(255, 0, 0); "> todir</span><span style="color: rgb(0, 0, 255); ">="${build.dir}"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">fileset </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${java.source}"</span><span style="color: rgb(255, 0, 0); "> excludes</span><span style="color: rgb(0, 0, 255); ">="**/*.launch, **/*.java, config/*.*"</span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">copy</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">copy </span><span style="color: rgb(255, 0, 0); ">includeemptydirs</span><span style="color: rgb(0, 0, 255); ">="false"</span><span style="color: rgb(255, 0, 0); "> todir</span><span style="color: rgb(0, 0, 255); ">="${build.dir}"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">fileset </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${java.config}"</span><span style="color: rgb(255, 0, 0); "> excludes</span><span style="color: rgb(0, 0, 255); ">="**/*.launch, **/*.java"</span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">copy</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">javac </span><span style="color: rgb(255, 0, 0); ">includejavaruntime</span><span style="color: rgb(0, 0, 255); ">="true"</span><span style="color: rgb(255, 0, 0); "> debug</span><span style="color: rgb(0, 0, 255); ">="true"</span><span style="color: rgb(255, 0, 0); "> debuglevel</span><span style="color: rgb(0, 0, 255); ">="${debuglevel}"</span><span style="color: rgb(255, 0, 0); "> destdir</span><span style="color: rgb(0, 0, 255); ">="${build.dir}"</span><span style="color: rgb(255, 0, 0); "> source</span><span style="color: rgb(0, 0, 255); ">="${source}"</span><span style="color: rgb(255, 0, 0); "> target</span><span style="color: rgb(0, 0, 255); ">="${target}"</span><span style="color: rgb(255, 0, 0); "> encoding</span><span style="color: rgb(0, 0, 255); ">="utf-8"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">src </span><span style="color: rgb(255, 0, 0); ">path</span><span style="color: rgb(0, 0, 255); ">="${java.source}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">exclude </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="config/"</span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">classpath</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
                </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">path </span><span style="color: rgb(255, 0, 0); ">refid</span><span style="color: rgb(0, 0, 255); ">="project.classpath"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
                </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">path</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
                </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">path </span><span style="color: rgb(255, 0, 0); ">refid</span><span style="color: rgb(0, 0, 255); ">="javaEE1.4"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
                </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">path</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">classpath</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">javac</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">

        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">javac </span><span style="color: rgb(255, 0, 0); ">debug</span><span style="color: rgb(0, 0, 255); ">="true"</span><span style="color: rgb(255, 0, 0); "> debuglevel</span><span style="color: rgb(0, 0, 255); ">="${debuglevel}"</span><span style="color: rgb(255, 0, 0); "> destdir</span><span style="color: rgb(0, 0, 255); ">="${build.dir}"</span><span style="color: rgb(255, 0, 0); "> source</span><span style="color: rgb(0, 0, 255); ">="${source}"</span><span style="color: rgb(255, 0, 0); "> target</span><span style="color: rgb(0, 0, 255); ">="${target}"</span><span style="color: rgb(255, 0, 0); "> encoding</span><span style="color: rgb(0, 0, 255); ">="utf-8"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">src </span><span style="color: rgb(255, 0, 0); ">path</span><span style="color: rgb(0, 0, 255); ">="${java.config}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">javac</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">    

    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">target</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">压缩，打包</span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">target </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="war"</span><span style="color: rgb(255, 0, 0); "> depends</span><span style="color: rgb(0, 0, 255); ">="compile"</span><span style="color: rgb(255, 0, 0); "> description</span><span style="color: rgb(0, 0, 255); ">="======compress j2ee war file======"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">mkdir </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${dist.dir}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">compress j2ee war file</span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">war </span><span style="color: rgb(255, 0, 0); ">destfile</span><span style="color: rgb(0, 0, 255); ">="${war.file}"</span><span style="color: rgb(255, 0, 0); "> webxml</span><span style="color: rgb(0, 0, 255); ">="${web.dir}/WEB-INF/web.xml"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">fileset </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${web.dir}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">classes </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${build.dir}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
            </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">lib </span><span style="color: rgb(255, 0, 0); ">dir</span><span style="color: rgb(0, 0, 255); ">="${lib.dir}"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">war</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">target</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
    
    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">shutdowntomcat</span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">target </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="shutdowntomcat"</span><span style="color: rgb(255, 0, 0); "> description</span><span style="color: rgb(0, 0, 255); ">="========shutdowntomcat==========="</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">exec </span><span style="color: rgb(255, 0, 0); ">executable</span><span style="color: rgb(0, 0, 255); ">="${tomcat.home}/bin/shutdown.sh"</span><span style="color: rgb(255, 0, 0); "> failonerror</span><span style="color: rgb(0, 0, 255); ">="false"</span><span style="color: rgb(0, 0, 255); ">&gt;&lt;/</span><span style="color: rgb(128, 0, 0); ">exec</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">sleep </span><span style="color: rgb(255, 0, 0); ">seconds</span><span style="color: rgb(0, 0, 255); ">="10"</span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">target</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
    
    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">startuptomcat</span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">target </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="startuptomcat"</span><span style="color: rgb(255, 0, 0); "> description</span><span style="color: rgb(0, 0, 255); ">="========startuptomcat==========="</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">sleep </span><span style="color: rgb(255, 0, 0); ">seconds</span><span style="color: rgb(0, 0, 255); ">="5"</span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">exec </span><span style="color: rgb(255, 0, 0); ">executable</span><span style="color: rgb(0, 0, 255); ">="${tomcat.home}/bin/startup.sh"</span><span style="color: rgb(255, 0, 0); "> failonerror</span><span style="color: rgb(0, 0, 255); ">="false"</span><span style="color: rgb(0, 0, 255); ">&gt;&lt;/</span><span style="color: rgb(128, 0, 0); ">exec</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">target</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">

    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">部署到tomcat下面克</span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">target </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="deploy"</span><span style="color: rgb(255, 0, 0); "> depends</span><span style="color: rgb(0, 0, 255); ">="war"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">copy </span><span style="color: rgb(255, 0, 0); ">file</span><span style="color: rgb(0, 0, 255); ">="${war.file}"</span><span style="color: rgb(255, 0, 0); "> todir</span><span style="color: rgb(0, 0, 255); ">="${tomcat.home}/webapps"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">target</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
    
    </span><span style="color: rgb(0, 128, 0); ">&lt;!--</span><span style="color: rgb(0, 128, 0); ">全自动无敌部署，启动关闭tomcat</span><span style="color: rgb(0, 128, 0); ">--&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">target </span><span style="color: rgb(255, 0, 0); ">name</span><span style="color: rgb(0, 0, 255); ">="auto"</span><span style="color: rgb(255, 0, 0); "> depends</span><span style="color: rgb(0, 0, 255); ">="shutdowntomcat,deploy,startuptomcat"</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
        </span><span style="color: rgb(0, 0, 255); ">&lt;</span><span style="color: rgb(128, 0, 0); ">echo </span><span style="color: rgb(255, 0, 0); ">message</span><span style="color: rgb(0, 0, 255); ">="DONE!!!!"</span><span style="color: rgb(255, 0, 0); "> </span><span style="color: rgb(0, 0, 255); ">/&gt;</span><span style="color: rgb(0, 0, 0); ">
    </span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">target</span><span style="color: rgb(0, 0, 255); ">&gt;</span><span style="color: rgb(0, 0, 0); ">
</span><span style="color: rgb(0, 0, 255); ">&lt;/</span><span style="color: rgb(128, 0, 0); ">project</span><span style="color: rgb(0, 0, 255); ">&gt;</span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span  style="font-family: monospace; line-height: normal; font-size: 13px; white-space: pre; "><span style="color: rgb(0, 0, 255); "><br></span></span></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span  style="font-family: monospace; line-height: normal; font-size: 13px; white-space: pre; "><span style="color: rgb(0, 0, 255); "><span  style="color: rgb(0, 0, 0); font-family: Arial, sans-serif, Helvetica, Tahoma; white-space: normal; font-size: 12px; line-height: 18px; "><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">下面是build.xml指定的properties文件，需要和build.xml放在同一个目录下面</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">需要指定<font color="#ff0000">work.space</font>（svn拉下来代码的存放，已经编译，打包用的临时目录）</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">tomcat.home</font><font size="3" color="#000000">（<font size="1">tomcat服务器的根目录,如果是其他服务器，需要修改对应项</font>）</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font size="3">===============================================</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">build.version=1.0.0</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">svnant.jar=/usr/java/svn/svnant.jar<br>svnClientAdapter.jar=/usr/java/svn/svnClientAdapter.jar<br>svnjavahl.jar=/usr/java/svn/svnjavahl.jar<br>javaEE1.4.lib=/usr/javaEE-1.4</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">debuglevel=source,lines<br>target=1.6<br>source=1.6</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">work.space=/home/gmail/workspace<br>dist.dir=${work.space}</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">build.dir=${work.space}/WebRoot/WEB-INF/classes<br>lib.dir=${work.space}/WebRoot/WEB-INF/lib</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">java.source=${work.space}/src<br>java.config=${work.space}/src/config</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">web.dir=${work.space}/WebRoot<br>resource.dir=${work.space}/resources</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">tomcat.home=/home/gmail/tomcat6<br>war.file=${dist.dir}/${<span class="hilite1" style="background-color: rgb(255, 255, 0); ">ant</span>.project.name}.war</font></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000">urlRepos=svn://192.168.1.100/product/SMMAIL/Develop</font></p></span></span></span></p></span>
<img src ="http://www.cppblog.com/keigoliye/aggbug/112045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2010-04-09 11:23 <a href="http://www.cppblog.com/keigoliye/archive/2010/04/09/112045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Using SVN With Ant</title><link>http://www.cppblog.com/keigoliye/archive/2010/04/09/112044.html</link><dc:creator>暗夜教父</dc:creator><author>暗夜教父</author><pubDate>Fri, 09 Apr 2010 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/keigoliye/archive/2010/04/09/112044.html</guid><wfw:comment>http://www.cppblog.com/keigoliye/comments/112044.html</wfw:comment><comments>http://www.cppblog.com/keigoliye/archive/2010/04/09/112044.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/keigoliye/comments/commentRss/112044.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/keigoliye/services/trackbacks/112044.html</trackback:ping><description><![CDATA[
<span style="font-family: 宋体; font-size: 14px; line-height: 25px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">摘要：<br>　　Subversion是越来越被广泛使用的版本管理工具，使用Ant脚本从Subversion获取代码，实现Daily Build。<br>　　1．Subversion概述<br>　　先引用<a rel="nofollow" class="bbs" target="_blank" href="http://svnbook.red-bean.com/nightly/en/svn-book.html" style="color: rgb(0, 102, 204); text-decoration: none; font: normal normal normal 12px/normal 宋体; font-size: 14px; ">Version Control with Subversion</a>&nbsp;中开头的话：<br>　　&#8220;If C gives you enough rope to hang yourself, think of Subversion as a sort of rope storage facility.&#8221;&nbsp;<br>　　 —Brian W. Fitzpatrick<br>　　然后告诉大家CVS是旧爱，Subversion是新欢。列举若干Subversion的特性和优势为证，懒得写了，直接看这里：<a rel="nofollow" class="bbs" target="_blank" href="http://subversion.tigris.org/" style="color: rgb(0, 102, 204); text-decoration: none; font: normal normal normal 12px/normal 宋体; font-size: 14px; ">Subversion的老家</a>。<br>　　关于如何使用Subversion以及相关客户端软件，网上慢慢看吧，<a rel="nofollow" class="bbs" target="_blank" href="http://svnbook.red-bean.com/" style="color: rgb(0, 102, 204); text-decoration: none; font: normal normal normal 12px/normal 宋体; font-size: 14px; ">官方自由图书</a>不错。<br>　　2．蚂蚁出场<br>　　团队最近的项目中即使用Subversion作为版本控制工具。Daily Build过两天就得搭建起来了，上蚂蚁！<br>　　Tigris.org提供了Subclipse，SvnClientAdapter和SvnAnt。(见<a rel="nofollow" class="bbs" target="_blank" href="http://subclipse.tigris.org/index.html" style="color: rgb(0, 102, 204); text-decoration: none; font: normal normal normal 12px/normal 宋体; font-size: 14px; ">这里</a>)<br>　　Subclipse是一个Eclipse的插件，实现了IDE与Subversion得集成；<br>　　SvnClientAdapter是Subversion的一套Java API，封装了客户端对Subversion的一些访问操作；<br>　　SvnAnt是用于访问Subversion的Ant任务，其依赖于SvnClientAdapter。<br>　　我要用的就是SvnAnt，用SVN Check Out一份SvnAnt的代码：<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　 svn co http://subclipse.tigris.org/svn/subclipse/trunk/svnant/ svnant<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　在这个工程里面还包括svnant的Ant Task使用说明文档，也可以在<a rel="nofollow" class="bbs" target="_blank" href="http://subclipse.tigris.org/svn/subclipse/branches/svnant/1.0.x/doc/svn.html" style="color: rgb(0, 102, 204); text-decoration: none; font: normal normal normal 12px/normal 宋体; font-size: 14px; ">这里</a>直接查看。<br>　　使用其中的build.xml编译SvnAnt后，在新生成的build子目录下会生成svnant.jar。按照官方文档的说法，把这个svnant.jar和SvnAnt工程的lib目录下的svnClientAdapter.jar和svnjavahl.jar拷贝到Ant的目录下即可。然后编写如下的Ant脚本进行测试：<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　 &lt;?xml version="1.0"?&gt;<br>　　 &lt;project name="SVN Ant Test" default="checkout" basedir="."&gt;<br>　　 &lt;!-- 1 --&gt;<br>　　 &lt;property name="remote.url"<br>　　 value="svn://16.157.xxx.xxx/trunk/LNPORTAL/src/P3UIPAdapter/" /&gt;<br>　　 &lt;property name="local.dir" value="local" /&gt;&nbsp;<br>　　 &lt;!-- 2 --&gt;<br>　　 &lt;taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask" /&gt;<br>　　 &lt;target name="prepare"<br>　　 description="Prepare the dirs for other tasks"&gt;<br>　　 &lt;delete dir="${local.dir}" /&gt;<br>　　 &lt;mkdir dir="${local.dir}" /&gt;<br>　　 &lt;/target&gt;<br>　　 &lt;!-- 3--&gt;<br>　　 &lt;target name="checkout" depends="prepare"&gt;<br>　　 &lt;svn javahl="true" username="lihq" password="password" &gt;<br>　　 &lt;checkout url="${remote.url}" destPath="${local.dir}" /&gt;<br>　　 &lt;/svn&gt;<br>　　 &lt;/target&gt;<br>　　 &lt;/project&gt;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　测试结果暂时不重要。<br>　　3．JavaSVN出场<br>　　SvnAnt的执行依赖SvnClientAdapter，而执行访问SVN时又有两种形式：其一是通过SVN 命令行程序的形式进行的（我在想：如果是这样，还不如使用Ant的exec任务呢）；其二是通过Javahl来执行的。<br>　　Javahl是一个用于访问Subversion的Java接口（估计是JNI），这需要Windows机上有svnjavahl.dll才行。团队的Daily Build的并不是Windows，于是求助JavaSVN，这是一个纯Java的SVN解决方案。<br>　　请访问这个Guide：<a rel="nofollow" class="bbs" target="_blank" href="http://tmate.org/svn/kb/user-guide-svnant.html" style="color: rgb(0, 102, 204); text-decoration: none; font: normal normal normal 12px/normal 宋体; font-size: 14px; ">Making SvnAnt use JavaSVN</a><br>　　我的实际步骤如下：<br>　　Step 1：从Ant的lib目录下移除SvnClientAdapter.jar，我没有发现javahl.jar，于是便移除了svnjavahl.jar，其实移不移后者无所谓；<br>　　Step 2：在刚才那个页面下载javasvn.jar和javasvn-javahl.jar，以及JavaSVN的svnClientAdapter-0.9.32.jar。并把这三个jar都拷贝到Ant的lib目录下；<br>　　然后运行上面写的SVN Ant测试脚本，结果如下：<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　 &#8230;<br>　　 BUILD FAILED<br>　　 java.lang.AbstractMethodError: org.tigris.subversion.svnant.Feedback.logRevision(J)V<br>　　&nbsp;<br>　　 Total time: 7 seconds<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　虽然SVN的代码都取下来了，但最后Ant会抛出一个如上的错，这会使得Ant脚本无法运行后面的任务。<br>　　4．Thanks Open Source<br>　　看来，大概是JavaSVN用自己的svnClientAdapter-0.9.32.jar改变了SVNAnt本来对调用。SVNAnt（by Tigris.org）原先是调用svnjavahl.jar来运行SVN命令的。替换svnClientAdapter-0.9.32.jar后，SVNAnt（plus JavaSVN）是调用javasvn-javahl.jar和javasvn.jar来运行SVN命令的。上面那个错误大概就是两套svnClientAdapter对某个抽象方法的定义不完全一致造成的，估计是API版本对应的问题。解决如下：<br>　　首先查看svnant.jar的源代码，发现org.tigris.subversion.svnant.Feedback是实现svnClientAdapter.jar中的一个名为ISVNNotifyListener的接口。这个接口中对报错的logRevision方法的定义是：<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　 public abstract void logRevision(long revision, String path)<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　而查看svnClientAdapter-0.9.32.jar中的ISVNNotifyListener的接口中的定义是：<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　 public abstract void logRevision(long revision)<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　明显不匹配，于是修改svnant.jar的源代码，修改org.tigris.subversion.svnant.Feedback，象其中添加一个方法如下：<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　 //This method is added by Beegee<br>　　 public void logRevision(long revision) {<br>　　 }<br>　　&nbsp;<br>　　 //This method is the original one by SVNANT<br>　　 public void logRevision(long revision, String path) {<br>　　 }<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　&nbsp;<br>　　然后重新编译SVNAnt，生成svnant.jar，拷贝替换Ant 的lib目录下的同名jar，重新运行以上SVN Ant测试脚本，结果如下：<br>　　<div><img name="image0" border="0" src="http://blog.csdn.net/images/blog_csdn_net/beegee/20118/r_SVNAnt_task.gif" onerror="this.src='http://www.wangchao.net.cn/images/notfound.jpg'"></div><br>　　OK！<br>　　－end－</span><img src ="http://www.cppblog.com/keigoliye/aggbug/112044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/keigoliye/" target="_blank">暗夜教父</a> 2010-04-09 11:20 <a href="http://www.cppblog.com/keigoliye/archive/2010/04/09/112044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>