zoukankan      html  css  js  c++  java
  • Albacore.NET下基于Rake(ruby make)的自动化构建工具

    微软系的工具以集成化著称,自动化构建一般也是基于Visual Studio或者它的插件。除此之外可能就是NAnt——Java中Ant的.NET版,很多开源的项目就是用NAnt来实现自动化构建的。我个人最不喜欢Ant的是他是基于XML的,我现在对XML有着本能的反感,他不符合DRY。XML中重复又没有意义的标签太多了,前几年对XML的替代可能是YAML,但是近几年随着Web开发的普及,JSON成了替代XML的不二选择,很多语言的标准库都有JSON的parser,这进一步推动了JSON这种数据交换格式的普及。

    Albacore是基于Ruby Rake的自动化构建工具,它语法和Rake保存一致,直接使用Visual Studio的solution,project文件,上手很简单。

    1,环境的安装

    1.1 安装Ruby

    Albacore是基于Ruby Rake的,所以先要安装Ruby,我是用Cygwin的,所以可以直接安装。如果是在Windows下安装Ruby,记得要把Ruby加到PATH中。这个网上有很多Ruby安装的教程。

    1.2 安装Rake和Albacore

    Rake是Ruby下的构建工具,可以使用gem来安装:

    $gem install rake

    Albacore也是Ruby下的一个包,同样可以使用gem来安装:

    $gem install albacore

    2,一个简单的示例

    假如我们有这样的目录结构:

    image

    我们现在在项目的根目录(跟solution同目录)创建一个Rakefile(这个Rakefile类型与Makefile或Ant中的build.xml,是自动化构建的脚本),Rakefile内容是:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    require 'albacore'
     
    task :default => [:build]
     
    msbuild :build do |msb|
      msb.solution = "BuyLottery.sln"
      msb.targets :clean, :build
      msb.properties :configuration => :release
    end

    创建完成后我们就可以用直接在该目录下用rake命令在该目录下构建项目了。

    3,讨论

    Ruby的元编程真的很牛逼,看Rakefile的编写就知道了。Albacore直接利用了Visual Studio自带的MSBuild和项目定义文件,这不仅较少了麻烦,还减少了重复,Rakefile的功能集中与构建任务本身,而繁琐的任务还留在Visual Studio的项目文件中。

    这里不得不提一下Rake,Rakefile中可以直接用Ruby脚本写你想完成的任务,比如创建目录,移动文件,等等。你所要用到的只是Ruby语言和其标准库。

    Ruby在这里更像是一个平台,无论是gem, rake, albocore其实都是Ruby脚本而已。

    4,Rakefile语法和Albacore提供的功能

    4.1,Rakefile

    Rakefile的语法是源于Makefile,他主要有任务(task)和依赖(=>)组成。

    1
    2
    3
    4
    5
    task :default => [:test]
     
    task :test do
      ruby "test/unittest.rb"
    end

    上面的Rakefile有两个task,一个是default,如果你直接rake而不加task的名字,default task会被调用。第二个是test,在do…end直接你可以用Ruby完成任何你想完成的构建任务。对于default这个task而言他用=>指出的他的依赖项,依赖项是一个Ruby数组,这个数组列出了这个task的所有依赖项(其实也是个task)。

    更详尽的Rakefile定义参见Rakefile Format

    4.2,Albacore提供的其他功能

    Albacore自定义了一些内置任务,比如我们示例中用到的msbuild,msbuild的目标是简化我们创建Rakefile task。示例中我们只要指定sln文件就可以构建一个项目了。其他的任务还包括:

    assemblyinfo    --版本号管理,其实就是操作AssemblyInfo.cs文件。
    nunit           --NUnit测试
    ncoverconsole   --
    zip             --压缩打包

    还有一些其他内置任务请参考Albacore的GitHub上的代码示例

    5,参考

    http://albacorebuild.net/

    https://github.com/Albacore/albacore

    https://github.com/Albacore/albacore/wiki/Getting-Started

    http://code-magazine.com/article.aspx?quickid=1006101&page=1

    http://rake.rubyforge.org/doc/rakefile_rdoc.html

     
     
    分类: Programming
  • 相关阅读:
    微信JSSDK使用指南
    安装eclipse中html/jsp/xml editor插件以及改动html页面的字体
    OpenLayers 3+Geoserver+PostGIS实现点击查询
    编程算法
    javascript闭包具体解释
    网络安全基本概念
    Android 5.1 Settings源代码简要分析
    Linq 使用注意
    父类引用指向子类对象
    CPU使用率
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2868164.html
Copyright © 2011-2022 走看看