zoukankan      html  css  js  c++  java
  • 使用NAnt提高工作效率(二)

    首先,我们来定义一个工作的目录,如下图



    接着,我们按如下的步骤,逐步完成一些学习和测试
    1.      新建一个名为Learn的Project,放在NAnt工作目录下,我们看到它有几个属性:
    Name 这个属性说明是必填的,就是Project的名称
    Default 这里需要输入默认执行的Target,输入一个Target的名称,比如copy-learn
    Basedir 就是Project的工作目录,这里输入 . 。表示是当前目录
    2.      关于Property。Property这里相当于定义变量,定义完之后在下面的变量或者Target中可以通过${PropertyName}访问
    假设,我们设置了一个Property ,其name=”output.dir” value=” I:\Workshop\Marvin\MyProgram\LearnDemo\NAnt\LearnDemo\NAnt学习\最终输出目录”,则,后面直接输入${output.dir}则表示上面设置的目录。这样有啥好处,就跟你使用变量一样
    3.      新建Target,名为copy-learn。这里有几个属性:
    Name Target的名称
    Depends 就是依赖的Target,这里需要输入Target的名称,有多个,则使用,分隔。假设这里输入:delete-learn,zip-learn。则说明:在执行copy-learn这个Target之前的,需要按顺序执行delete-learn和zip-learn这两个Target
    接着在这个Target下,我们添加一个copy的动作。直接输入copy或者下拉选择到copy,
    Editor4NAnt或自动弹出一个对话框,让你填入相关的属性:
    File 要被拷贝的文件
    ToFile拷贝到的文件
    ToDir 要拷贝到的目录

    还有其他属性,暂时没有研究,但是这几个属性我们已经足够完成不少事情了


    点击file对应的…按钮,弹出如下的对话框



    同样我们输入tofile,最终的结果如下

    1     <target name="copy-learn">
    2         <copy file="${copy-src-dir}\a.txt" tofile=".\test.abc" />
    3     </target>

    这个时候点击Execute,会在learn.build这个目录下生成一个a.txtcopy,并且重命名为test,后缀名为abc

    是不是很简单。

    呵呵,当然,我们可能不单单是复制一个文件,可能是复制一个文件夹,复制一个文件夹到另外一个文件夹

    如果要复制到另外一个文件夹而不是另外一个文件,则只需填写todir而不是填写tofile

    如果要从一个文件夹复制,那我们就不能填写file了,需要在copy这个节点下再添加一个子节点。选择到copy这个节点,然后点击Add,则会出现Copy节点下能够录入的子节点



    这里我们选择fileset
    然后,我们在basedir中录入要copy的目录,点击ok确定。
    再回来我们点击execute,等等,怎么没有文件copy过去?别着急,那是因为你没有选择相关的文件。我们再在fileset下点击,会出现另外一些的子节点,这里,我们选择include
    然后再include的name属性中输入*,表示会把当前目录下的所有文件复制过去。
    这时再点击Execute,是不是有文件复制过去了。

    这时我们在点击一下Execute,嗯,这次怎么没有文件复制了呢,那是因为NAnt默认只复制有变化的文件。有时我们如果不确定,则须先删除原先复制的文件。

    -         如果需要排除一些文件,怎么办?那就输入exclude属性 

    -         如果要复制子文件夹下的文件怎么办?那name就这么写:**/*。这里好像是用*作分隔符。

    -         如果需要include多个类型和Exclude多个类型,则一直添加下去即可。而且后面的属性会覆盖前面的属性

    最终的结果如下:

    1     <target name="copy-learn2">
    2         <copy todir="CopyDestination">
    3             <fileset basedir="${copy-src-dir}">
    4                 <include name="**/*" />
    5                 <exclude name="*.pdb" />
    6                 <exclude name="*.db" />
    7             </fileset>
    8         </copy>
    9     </target>

     

    对于其他的includes,includefile,includelist我也不懂,希望有高手指点下。
    下面再说说delete等其他属性,但就不截图了,直接根据生成的Xml说要点即可。
    Delete:
    属性有file,dir等。File指定删除文件,dir指定删除目录。如果还不能满足,则需要定义其下的fileset属性。用法同copy

    1     <target name="delete-learn">
    2         <delete dir="${copy-src-dir}" />
    3     </target>

    以上是删除${copy-src-dir}这个目录

     

    Zip
    属性必填是
    zipfile,指的是压缩后的名称,需要同时指定后缀名。

     

     

    1     <target name="zip-learn">
    2         <zip zipfile="test.rar">
    3             <fileset basedir="${copy-src-dir}">
    4                 <include name="**/*" />
    5             </fileset>
    6         </zip>
    7     </target>


     

    上面的Target${copy-src-dir}下的所有文件包括子文件夹压缩为test.rar,同时保存到build文件的目录中。

     

    Svn-update

    Editor4NAnt已经支持这个命令

    必填的为SVNUrl地址。
    一般还要填写的是用户名、用户密码、还有要更新的目录

     

    1     <target name="svn-learn">
    2         <svn-update uri="https://localhost:8088/svn/test" username="marvin" password="marvin" destination="${copy-src-dir}"></svn-update>
    3     </target>

     
    上述Target,点击之后会从test这个svn中更新内容到${copy-src-dir}这个目录。
    点击Execute,这个时候你会发现NAnt还是不能使用svn-update这个命令的,因为NAnt默认是不支持的。我们这时需要NAntContrib这个NAnt扩展。从网下下载回来(需要的也可以问我要),然后解压,把bin目录下的所有内容拷贝到NAnt的bin目录下。这时这个命令可以为NAnt用了。
    不过我们点击Execute还是会发现svn.exe没有找到。因此你需要告诉NAntsvn的目录。怎么告诉,就是设置环境变量。把svn的bin目录加到path这个环境变量中,重启电脑。这个时候我们点击Execute,呵呵,终于自动从Svn中更新内容了。

    再讲一个call指令。
    这个指令主要是用来调用其他Target的。
    一般我在project中定义一个publish的default target,在这个target中使用call调用其他target,就可以完成很多内容了。

    上述用到project对应的xml如下:

     1 <?xml version="1.0" encoding="utf-16"?>
     2 <project name="learn" default="copy-learn" basedir="." xmlns="http://nant.sf.net/schemas/nant.xsd">
     3     <property name="copy-src-dir" value="I:\Workshop\Marvin\MyProgram\LearnDemo\NAnt\LearnDemo\NAnt学习\被Copy的文件夹" />
     4     <target name="copy-learn">
     5         <copy file="${copy-src-dir}\a.txt" tofile=".\test.abc" />
     6     </target>
     7     <target name="copy-learn2">
     8         <copy todir="CopyDestination">
     9             <fileset basedir="${copy-src-dir}">
    10                 <include name="**/*" />
    11                 <exclude name="*.pdb" />
    12                 <exclude name="*.db" />
    13             </fileset>
    14         </copy>
    15     </target>
    16     <target name="delete-learn">
    17         <delete dir="${copy-src-dir}" />
    18     </target>
    19     <target name="zip-learn">
    20         <zip zipfile="test.rar">
    21             <fileset basedir="${copy-src-dir}">
    22                 <include name="**/*" />
    23             </fileset>
    24         </zip>
    25     </target>
    26     <target name="svn-learn">
    27         <svn-update uri="https://localhost:8088/svn/test" username="marvin" password="marvin" destination="${copy-src-dir}"></svn-update>
    28     </target>
    29     <target name="publish">
    30         <call target="copy-learn" />
    31         <call target="delete-learn" />
    32         <call target="svn-learn" />
    33     </target>
    34 </project>
  • 相关阅读:
    leetcode-19-merge
    leetcode-18-remove
    R-codes-tips
    python-bioInfo-codes-2
    Java-framework-Vaadin
    leetcode-17-BST
    生物信息学-知识笔记-1
    leetcode-16-greedyAlgorithm
    perl-tips-1
    计算机网络HTTP、TCP/IP包
  • 原文地址:https://www.cnblogs.com/marvin/p/nantlearn2.html
Copyright © 2011-2022 走看看