建议在开发环境中使用Gradle的守护进程,不建议在持续集成环境和构建服务器环境中使用守护进程.守护进程可以更快的构建,这对于一个正坐在椅子前构建项目的人来说非常重要.对于CI构建来说,稳定性和可预见性是最重要的.为每个构建运行时用一个新的,完全孤立于以前的版本的程序,更加可靠。
为了让你的构建可以自定义任务, 你可以使用 taskdef(通常更容易) 或者 typedef Ant 任务, 就像你在一个build.xml文件中一样. 然后,你可以参考内置 Ant 任务去定制 Ant 任务.例 16.5.使用自定义 Ant 任务build.gradletask check << { ant.taskdef(resource: 'checkstyletask.properties') { classpath { fileset(dir: 'libs', includes: '*.
在构建脚本中, Ant 属性是由 Gradle提供的. 这是一个用于参考的 AntBuilder 实例. AntBuilder 用于从构建脚本访问 Ant 任务, 类型和属性. 下面的例子解释了从 Ant 的 build.xml 格式到 Grooy 的映射.你可以通过调用 AntBuilder 实例的方法执行 Ant 任务. 你可以使用任务名称作为方法名, 比如, 可以通过调用 anto.echo() 任务执行 Ant echo 任务.
Gradle 出色的集成了 Ant. 你可以在 Gradle 构建时使用单独的 Ant 任务或完整的 Ant 构建. 事实上, 你会发现在 Gradle 构建脚本中使用Ant任务远比直接使用 Ant 的 XML 格式更加容易和强大. 你甚至可以将 Gradle 仅仅作为一个强大的 Ant 脚本工具.Ant 可以分为两层. 第一层是 Ant 语言. 它给 build.xml 文件, 处理目标, 像 macrodefs 的特殊构造等提供语法支持.
同步任务 ( Sync ) 任务继承自复制任务 ( Copy ) , 当它执行时,它会复制源文件到目标目录中,然后从目标目录中的删除所有非复制的文件,这种方式非常有用,比如安装一个应用,创建一个文档的副本,或者维护项目的依赖关系副本.下面有一个例子,维护 build/libs 目录下项目在运行时的依赖例 15.7 使用 Sync 任务复制依赖关系build.
你可以使用 ZIP 或者 TAR 等压缩文件的内容作为文件树, Project.zipTree() 和 Project.tarTree() 方法返回一个 FileTree 实例, 你可以像使用其他文件树或者文件集合一样使用它.例如,你可以使用它去扩展一个压缩文档或者合并一些压缩文档.例 15.7 使用压缩文档作为文件树build.gradle// 使用路径创建一个 ZIP 文件FileTree zip = zipTree('someFile.
您也可以使用其他的构建脚本配置任意的对象.例子: 14.5.使用别的脚本配置配置对象build.gradletask config << { def pos = new java.text.FieldPosition(10) // 使用另一个脚本 apply from: 'other.gradle', to: pos println pos.beginIndex println pos.endIndex}other.gradlebeginIndex = 1endIndex = 5使用 gradle -q configure 输出>
您还可以使用其他的构建脚本来配置当前的项目,Gradle 构建语言的所有的内容对于其他的脚本都是可以使用的. 您甚至可以在别的脚本中再使用其他的脚本.例子 14.3.使用其他的构建脚本配置项目build.gradleapply from: 'other.gradle'other.gradleprintln "configuring $project"task hello <<
为了辅助传统的命令行交互,Gradle还提供了一个图形界面.我们可以使用Gradle命令中--gui选项来启动它.例子 12.1. 启动图形界面gradle --gui注意:这个命令执行后会使得命令行一直处于封锁状态,直到我们关闭图形界面.不过我们可以另外加上“&”让它在后台执行:gradle --gui&如果我们从自己的Gradle项目目录中启动这个图形界面,我们应该会看到任务树.图 12.1.
本章介绍了命令行的一些基本功能.正如在前面的章节里你所见到的调用 gradle 命令来运行一个构建.
当任务创建之后,它可以通过API来访问.这个和 Ant 不一样.举个例子,你可以创建额外的依赖.例子 6.9. 通过API访问一个任务 - 加入一个依赖build.gradle4.times { counter -> task "task$counter" << { println "I'm task number $counter" }}task0.dependsOn task2, task3gradle -q task0 命令的输出>
我们知道在 Java 中存在这个接口 Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过 new 生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显。然而我们知道拷贝分为深拷贝和浅拷贝之分,但是浅拷贝存在对象属性拷贝不彻底问题。
在集合 API 中,最初设计的 Vector 和 Hashtable 是多线程安全的。例如:对于 Vector 来说,用来添加和删除元素的方法是同步的。如果只有一个线程与 Vector 的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能会带来死锁。因此,对于更改集合内容的方法,没有一个是同步化的。
flex/bisonclojure下的神器instaparsejison: javascript bisonantlr4parsec Haskell下的神器
当多个View语义上相同时:不仅样式相同,而且View的功能也相同;当某项数值在多处使用时,style中的数值使用引用方式定义(抽离为dimen,color等);将数值抽离出来,使用引用方式,不仅可以减小重复,方便修改;还能根据不同屏幕尺寸、横竖屏,为同一引用定义不同的值;
比例尺是 D3 中很重要的一个概念,上一章里曾经提到过直接用数值的大小来代表像素不是一种好方法,本章正是要解决此问题。为什么需要比例尺上一章制作了一个柱形图,当时有一个数组:var dataset = [ 250 , 210 , 170 , 130 , 90 ];绘图时,直接使用 250 给矩形的宽度赋值,即矩形的宽度就是 250 个像素。
目前比较常见的连接池实现有DBCP、C3P0,Tomcat_JDBC等。本文使用的连接池是DBCP。进入http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi下载Apache Commons DBCP for JDBC,http://commons.apache.org/proper/commons-pool/download_pool.cgi中下载Apache Commons Pool,http://dev.mysql.com/downloads/connector/j/下载MySQL的JDBC驱动。
Velocity is a Java-based template engine. It permits anyone to use a simple yet powerful template language to reference objects defined in Java code.
优点简化对UI的重用,将UI和交互放到Fragment里面,可以方便的针对不同设备设置不同的UI(如pad显示两个fragment,phone显示一个);完整生命周期使用fragment直接在layout.xml里面声明一个Fragment使用FragmentManager动态添加、替换、移除;必须通过FragmentTransaction来完成动态改变;addToBackStack()方法可以支持通过返回键回退到上一个Fragment;
本文演示如何使用Spring MVC做出最简单的Hello World应用。示例1项目创建和之前一样,不过在最后一步要选择Spring Web MVC: 项目结构如下: web.xml源码:<?xml version="1.0" encoding="UTF-8"?><web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.
关注时代Java