• 运行ant

ant 使用当前目录下的build.xml运行ant,指定缺省的target;

ant –buildfile mybuild.xml 使用当前目录下的mybuild.xml运行ant,并执行缺省的target;

ant –buildfile mybuild.xml mytarget使用当前目录下mybuild.xml运行ant,并执行名为mytarget的target;

  • 编写build.xml

  1. project

    例如:

    <project name="Cesium" default="combine">

    属性:

    name : 项目名称

    default:指定运行的target名称,没有指定时使用缺省的target;

    basedir:基准路径,其他的相对路径都是基于这个基准路径的;

    description:项目描述信息。 

  2. target

    <target name="combine" depends="build,combineJavaScript" description="Combines all source files into a single stand-alone script." />

    注意:一个target可以依赖于其他target。例如combine依赖于build target和combineJaveScript target,ant会按照depends中target出现的顺序依次执行,并且每个target只会被执行依次,即使有多个target依赖于他。

    target有以下属性:

    name:target名称,这个属性是必须的;

    depends:依赖目标,非必须

    if:当属性设置时才执行该target,非必须;

    unless:当属性没有设置时才执行该target,非必须;

    description:target的描述信息,非必须;

  3. task

    Task分为内置task和自定义task,每个task都是一段可执行的代码。

    1.  内置task

      <copy file="${requirejsPath}/require.min.js" tofile="${cesiumViewerOutputDirectory}/require.js" />
    2. 自定义task

      调用任务:

      <glslToJavascript minify="${build.minification}" minifystatefile="${buildDirectory}/minifyShaders.state">
      
          <glslfiles dir="${shadersDirectory}" includes="**/*.glsl" />
      
          <existingjsfiles dir="${shadersDirectory}" includes="**/*.js" excludes="*.profile.js" />
      
      </glslToJavascript>

      定义任务:

      <scriptdef name="glslToJavascript" language="javascript" src="${tasksDirectory}/glslToJavaScript.js" manager="bsf" classpathref="javascriptClassPath" loaderref="javascript.loader">
      
                  <attribute name="minify" />
      
                  <attribute name="minifystatefile" />
      
                  <element name="glslfiles" type="fileset" />
      
                  <element name="existingjsfiles" type="fileset" />
      
      </scriptdef>

      这是glslToJavaScript.js源代码:

      /*global importClass,project,attributes,elements,java,Packages*/
      importClass(Packages.org.mozilla.javascript.tools.shell.Main); /*global Main*/
      Main.exec(['-e', '{}']);
      var load = Main.global.load; load(project.getProperty('tasksDirectory') + '/shared.js'); /*global forEachFile,readFileContents,writeFileContents,File,FileReader,FileWriter,FileUtils*/ importClass(java.io.StringReader); /*global StringReader*/
      importClass(java.util.HashSet); /*global HashSet*/
      importClass(Packages.org.apache.tools.ant.filters.StripJavaComments); /*global StripJavaComments*/ var minify = /^true$/.test(attributes.get('minify')); var minifyStateFilePath = attributes.get('minifystatefile');
      writeFileContents(minifyStateFilePath, minify); var minifyStateFileLastModified = new File(minifyStateFilePath).lastModified(); // collect all currently existing JS files into a set, later we will remove the ones
      // we still are using from the set, then delete any files remaining in the set.
      var leftOverJsFiles = new HashSet(); forEachFile('existingjsfiles', function(relativePath, file) {
      "use strict";
      leftOverJsFiles.add(file.getAbsolutePath());
      }); var builtinFunctions = [];
      var builtinConstants = [];
      var builtinStructs = []; forEachFile('glslfiles', function(relativePath, file) {
      "use strict";
      var glslFile = file;
      var jsFile = new File(file.getParent(), file.getName().replace('.glsl', '.js')); // identify built in functions, structs, and constants
      if(glslFile.getPath().indexOf('Builtin' + File.separator + 'Functions') !== -1) {
      builtinFunctions.push(file.getName().replace('.glsl', ''));
      }
      else if(glslFile.getPath().indexOf('Builtin' + File.separator + 'Constants') !== -1) {
      builtinConstants.push(file.getName().replace('.glsl', ''));
      }
      else if(glslFile.getPath().indexOf('Builtin' + File.separator + 'Structs') !== -1) {
      builtinStructs.push(file.getName().replace('.glsl', ''));
      } leftOverJsFiles.remove(jsFile.getAbsolutePath()); if (jsFile.exists() && jsFile.lastModified() > glslFile.lastModified() && jsFile.lastModified() > minifyStateFileLastModified) {
      return;
      } var contents = readFileContents(glslFile);
      contents = contents.replace(/\r\n/gm, '\n'); var copyrightComments = '';
      var extractedCopyrightComments = contents.match(/\/\*\*(?:[^*\/]|\*(?!\/)|\n)*?@license(?:.|\n)*?\*\//gm);
      if (extractedCopyrightComments) {
      copyrightComments = extractedCopyrightComments.join('\n') + '\n';
      } if (minify) {
      contents = String(FileUtils.readFully(new StripJavaComments(new StringReader(contents))));
      contents = contents.replace(/\s+$/gm, '').replace(/^\s+/gm, '').replace(/\n+/gm, '\n');
      contents += '\n';
      } contents = contents.split('"').join('\\"').replace(/\n/gm, '\\n\\\n');
      contents = copyrightComments + '\
      //This file is automatically rebuilt by the Cesium build process.\n\
      /*global define*/\n\
      define(function() {\n\
      "use strict";\n\
      return "' + contents + '";\n\
      });'; writeFileContents(jsFile.getAbsolutePath(), contents, true);
      }); // delete any left over JS files from old shaders
      for ( var it = leftOverJsFiles.iterator(); it.hasNext();) {
      new File(it.next())['delete']();
      } var generateBuiltinContents = function(contents, builtins, path){
      "use strict";
      var amdPath = contents.amdPath;
      var amdClassName = contents.amdClassName;
      var builtinLookup = contents.builtinLookup;
      for (var i = 0; i < builtins.length; i++) {
      var builtin = builtins[i];
      amdPath = amdPath + ',\n \'./' + path + '/' + builtin + '\'';
      amdClassName = amdClassName + ',\n ' + 'czm_' + builtin;
      builtinLookup = builtinLookup + ',\n ' + 'czm_' + builtin + ' : ' + 'czm_' + builtin;
      }
      contents.amdPath = amdPath;
      contents.amdClassName = amdClassName;
      contents.builtinLookup = builtinLookup;
      }; //generate the JS file for Built-in GLSL Functions, Structs, and Constants
      var contents = {amdPath:'', amdClassName:'', builtinLookup:''};
      generateBuiltinContents(contents, builtinConstants, 'Constants');
      generateBuiltinContents(contents, builtinStructs, 'Structs');
      generateBuiltinContents(contents, builtinFunctions, 'Functions'); contents.amdPath = contents.amdPath.replace(',\n', '');
      contents.amdClassName = contents.amdClassName.replace(',\n', '');
      contents.builtinLookup = contents.builtinLookup.replace(',\n', ''); var fileContents = '\
      //This file is automatically rebuilt by the Cesium build process.\n\
      /*global define*/\n\
      define([\n' +
      contents.amdPath +
      '\n ], function(\n' +
      contents.amdClassName +
      ') {\n\
      "use strict";\n\
      return {\n' + contents.builtinLookup + '};\n\
      });'; var builtinFile = new File(project.getProperty('shadersDirectory') + '/Builtin', 'CzmBuiltins.js');
      writeFileContents(builtinFile.getAbsolutePath(), fileContents, true);

      Scriptdef使用脚本语言定义一个ant task,ant scripting languanges支持BSF引擎和JSR_223引擎来定义脚本。

      属性:

      name : 任务名称,必需;

      language : 脚本语言,必须被BSF或者JSR引擎支持,必须;

      manager : BSF或者JSR引擎;

      src :执行任务的脚本路径

      uri : xml 命名空间;

      classpath : script引入的class的classpath路径

      classpathref : 使用refid引入classpath;

      loaderfef : 加载script的loader,从指定的classpath来构造

【ANT】构建文件build.xml的更多相关文章

  1. 【ANT】一个简单的ANT生成文件build.xml

    <?xml version="1.0" ?> <project default="test"> <target name=&quo ...

  2. 项目打包文件build.xml

    Make命令其实就是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平台的应用 ...

  3. Android开发之深入理解Android Studio构建文件build.gradle配置

    摘要: 每周一次,深入学习Android教程,TeachCourse今天带来的一篇关于Android Studio构建文件build.gradle的相关配置,重点学习几个方面的内容:1.applica ...

  4. java ant 编译打包build.xml完整配置范例

    java ant 编译打包build.xml完整配置范例 <?xml version="1.0" encoding="UTF-8" ?> <p ...

  5. Ant构建文件解析

    <?xml version="1.0" encoding="UTF-8"?> <!-- 在Ant脚本中,project是这个XML文档的根结点 ...

  6. ant+jmeter中build.xml配置详解

  7. java分享第二十天(build.xml的语法及写法)

    通常情况下,Ant构建文件build.xml应该在项目的基础目录.可以自由使用其他文件名或将构建文件中其他位置.在本练习中,创建一个名为build.xml 在电脑的任何地方的文件. <?xml ...

  8. [Android] 基于 Linux 命令行构建 Android 应用(五):Ant 构建命令

    Android SDK 提供的 android 工具可以在项目根目录自动生成 Ant 构建文件 build.xml[1].进入项目根目录后,你可以使用以下 Ant 命令[2]. ant clean 清 ...

  9. Ant构建原理及build.xml文档描述

    最近在改写jmeter,用到ant构建,记录一下. Ant的概念Make命令是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant ...

随机推荐

  1. this指针和m_hWnd的区别

    m_hWnd ① m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员, 先看一下MSDN的解析: The handle of the Windows window a ...

  2. 认识JavaScript的原型

    本来打算也写一个JavaScript学习笔记的系列,不过由于笔者不太想买大部头的js数据,和网上的资料也不少,所以js系列就打算写到了算了了. 要理解JavaScript就要理解其原型,首先我们先区分 ...

  3. Java学习笔记(六):面向对象、接口和抽象类

    类和对象 Java是一门面向对象的语言,下面我们来了解一下Java中的面向对象. 方法和重载 Java中的方法格式如下: 访问修饰符 返回值类型 方法名(参数){ 方法主体 } Java的方法支持重载 ...

  4. C#全角半角转换函数

    Code#region 全角半角转换 /// <summary> /// 转全角的函数(SBC case) /// </summary> /// <param name= ...

  5. android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题

    1.       手机上有一个合并过的联系人 2.       编辑合并后的联系人 3.       手机屏幕会缓慢变暗之后再进入编辑界面. 首先找到contacts源码包下的EditContactA ...

  6. TChromeTabs 优化改进

    已知未解决问题 全屏时当窗体失去焦点,则会显示出未绘制完成的原标题栏(Fixed): 处于非 Areo 效果下时,窗体标题栏需要定制. 新增按钮上的 Hint 提示后再移至其它标签,将无法重新提示. ...

  7. 【转】GCC使用简介

    Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作品之一.gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一 ...

  8. 恢复WinMend Folder Hidden隐藏的文件

    前几天用了个WinMend Folder Hidden,顺手隐藏了一个文件,感觉很方便的样子. 今天突然要用的时候发现这个文件不见了,于是我去Everything搜索,其实我是忘了之前已经把它隐藏了, ...

  9. Swift学习笔记四

    前面三篇笔记通过一些示例展示了Swift的一些特性,粗略地介绍了它的语法和特色,从这一篇笔记开始,将正式系统地介绍Swift的语法和特性了. Swift是一门为iOS和OSX开发准备的全新语言,但是它 ...

  10. C# - 函数参数的传递

    近段时间,有几个刚刚开始学习C#语言的爱好者问我:C#中的函数,其参数的传递,按值传递和按引用传递有什么区别.针对这一问题,我简单写了个示例程序,用以讲解,希望我没有把他们绕晕.因为,常听别人说起:“ ...