<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>五四陈科学院-坚信科学，分享技术 &#187; ant</title>
	<atom:link href="http://www.54chen.com/tag/ant/feed" rel="self" type="application/rss+xml" />
	<link>http://www.54chen.com</link>
	<description>PHP、JAVA、缓存、架构、经验、分享</description>
	<lastBuildDate>Fri, 10 Feb 2012 12:21:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>试用新型JAVA构建工具Gradle</title>
		<link>http://www.54chen.com/java-ee/try-the-new-build-tools-gradle.html</link>
		<comments>http://www.54chen.com/java-ee/try-the-new-build-tools-gradle.html#comments</comments>
		<pubDate>Thu, 01 Apr 2010 03:16:42 +0000</pubDate>
		<dc:creator>cc0cc</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[gradle]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://www.54chen.com/java-ee/try-the-new-build-tools-gradle.html</guid>
		<description><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br>54chen在研究一个开源项目的时候，发现其使用的构建工具很特殊，叫Gradle，和ant maven类似，他提供的东西更加有感觉，不过冒似版本还不高，最新的0.9也只是一个预览版本。 名词解释 ant 当一个代码项目大了以后，每次重新编译，打包，测试等都会变得非常复杂而且重复，因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的，当然不会用平台相关的make脚本来完成这些批处理任务了，ANT本身就是这样一个流程脚本引擎，用于自动化调用程序完成项目的编译，打包，测试等。除了基于JAVA是平台无关的外，脚本的格式是基于XML的，比make脚本来说还要好维护一些。 maven Maven是基于项目对象模型(POM)，可以通过一小段描述信息来管理项目的构建，报告和文档的软件项目管理工具. 如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs，你一定会自问，是否有有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择，将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码，运行测试，生成文档并宿主项目网页. 项目的主页地址为：http://maven.apache.org/ Gradle Gradle是一个基于Groovy的build工具——“Ease - Freedom - Power for your build Gradle试图使用Groovy语法来提供Ant的灵活性；它支持多项目的创建，为Ivy提供了一个layer，提供了build-by-convention集成；而且它还让你获得许多类似Maven的功能比如传递依赖管理和约定大于配置。 Groovy Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程，使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时，Groovy 代码能够与 Java 代码很好地结合，也能用于扩展现有代码。目前的 &#8230;<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></description>
			<content:encoded><![CDATA[<a href="http://www.54chen.com"><img border="0" src="http://www.54chen.com/wp-content/themes/54chen2011/images/54chen-logo.gif"></a><br>以下内容由<a href="http://www.54chen.com">[五四陈科学院]</a>提供<br><p>54chen在研究一个开源项目的时候，发现其使用的构建工具很特殊，叫Gradle，和ant maven类似，他提供的东西更加有感觉，不过冒似版本还不高，最新的0.9也只是一个预览版本。</p>
<p><strong>名词解释</strong></p>
<p>ant<br />
当一个代码项目大了以后，每次重新编译，打包，测试等都会变得非常复杂而且重复，因此c语言中有make脚本来帮助这些工作的批量完成。在Java 中应用是平台无关性的，当然不会用平台相关的make脚本来完成这些批处理任务了，ANT本身就是这样一个流程脚本引擎，用于自动化调用程序完成项目的编译，打包，测试等。除了基于JAVA是平台无关的外，脚本的格式是基于XML的，比make脚本来说还要好维护一些。</p>
<p>maven<br />
Maven是基于项目对象模型(POM)，可以通过一小段描述信息来管理项目的构建，报告和文档的软件项目管理工具.<br />
如果你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs，你一定会自问，是否有有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择，将你的注意力从作业层转移到项目管理层。Maven项目已经能够知道如何构建和捆绑代码，运行测试，生成文档并宿主项目网页.<br />
项目的主页地址为：http://maven.apache.org/</p>
<p>Gradle<br />
Gradle是一个基于Groovy的build工具——“Ease - Freedom - Power for your build<br />
Gradle试图使用Groovy语法来提供Ant的灵活性；它支持多项目的创建，为Ivy提供了一个layer，提供了build-by-convention集成；而且它还让你获得许多类似Maven的功能比如传递依赖管理和约定大于配置。</p>
<p>Groovy<br />
Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程，使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时，Groovy 代码能够与 Java 代码很好地结合，也能用于扩展现有代码。目前的 Groovy 版本是 1.6.3，在 Java 1.4 和 Java 5 平台上都能使用，也能在 Java 6 上使用。</p>
<p><strong>为何使用Gradle</strong><br />
尽管Ant没有内置的依赖管理是个事实，但是将Ivy整合到你build.xml中还是很简单的。Maven有构建脚本，只需要几行代码来配置就可以有许多功能：依赖管理、内置的编译和打包应用的任务、与Jetty的集成、干净的项目web网址，与cobertura的集成、pmd或者findbugs。<br />
Maven和Ant就只是我们的选择么？是否还有比它们更好的选择？在过去的几年中，我们看到很多项目，他们使用的工具不再使用XML来定义构建逻辑，而是真正的编程语言像Groovy、Ruby、Python，它们经常允许依赖管理。这里有几个：GRADLE 、Gant、Kundo、 Raven、 Buildr。</p>
<p><strong>如何使用Gradle</strong><br />
用Groovy语法（相当类似java）写好构建的逻辑。类似下面这个（elasticsearch项目的）：</p>
<blockquote><p>import java.text.SimpleDateFormat</p>
<div><code>defaultTasks "clean", "release"</code></div>
<div><code>usePlugin BasePlugin</code></div>
<div><code>archivesBaseName = 'elasticsearch'</code></div>
<p><code>buildTime = new Date()<br />
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");<br />
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));<br />
buildTimeStr = sdf.format(buildTime)</code></p>
<p>versionNumber = '0.5.1-SNAPSHOT'</p>
<p>explodedDistDir = new File(distsDir, 'exploded')<br />
explodedDistLibDir = new File(explodedDistDir, 'lib')<br />
explodedDistBinDir = new File(explodedDistDir, 'bin')<br />
explodedDistConfigDir = new File(explodedDistDir, 'config')</p>
<p>allprojects {<br />
group = 'org.elasticsearch'<br />
version = versionNumber</p>
<p>plugins.withType(JavaPlugin).whenPluginAdded {<br />
sourceCompatibility = 1.6<br />
targetCompatibility = 1.6<br />
}</p>
<p>repositories {<br />
mavenCentral()<br />
mavenRepo urls: 'http://repository.jboss.com/maven2/'<br />
}<br />
}</p>
<p>configurations {<br />
dists<br />
distLib {<br />
visible = false<br />
}<br />
}</p>
<p>dependencies {<br />
distLib project(':elasticsearch')<br />
}</p>
<p>task explodedDist(dependsOn: [configurations.distLib], description: 'Builds a minimal distribution image') &lt;&lt; {<br />
[explodedDistDir, explodedDistLibDir, explodedDistBinDir, explodedDistConfigDir]*.mkdirs()<br />
// remove old elasticsearch files<br />
ant.delete { fileset(dir: explodedDistLibDir, includes: "$archivesBaseName-*.jar") }</p>
<p>copy {<br />
from configurations.distLib<br />
into explodedDistLibDir<br />
}</p>
<p>copy { from('bin'); into explodedDistBinDir }<br />
copy { from('config'); into explodedDistConfigDir }</p>
<p>copy {<br />
from('.')<br />
into explodedDistDir<br />
include 'LICENSE.txt'<br />
include 'NOTICE.txt'<br />
include 'README.textile'<br />
}</p>
<p>ant.chmod(dir: "$explodedDistDir/bin", perm: "ugo+rx", includes: "**/*")<br />
}</p>
<p>task zip(type: Zip) {<br />
dependsOn explodedDist<br />
// classifier = 'all'<br />
}</p>
<p>zip.doFirst {task -&gt;<br />
zipRootFolder = "$archivesBaseName-${-&gt; version}"<br />
task.configure {<br />
zipFileSet(dir: explodedDistDir, prefix: zipRootFolder) {<br />
exclude 'bin/*'<br />
}<br />
zipFileSet(dir: explodedDistDir, prefix: zipRootFolder, fileMode: '775') {<br />
include 'bin/*'<br />
exclude 'bin/*.*'<br />
}<br />
zipFileSet(dir: explodedDistDir, prefix: zipRootFolder) {<br />
include 'bin/*.*'<br />
}<br />
}<br />
}</p>
<p>task release(dependsOn: [zip]) {<br />
}</p>
<p> <br />
task wrapper(type: Wrapper) {<br />
gradleVersion = '0.8'<br />
jarPath = 'gradle'<br />
}</p></blockquote>
<p>到Gradle下载zip包，解压到任何位置，设置环境变量中的GRADLE_HOME过程此位置，path中增加gradle的bin目录，<a href="http://www.gradle.org">http://www.gradle.org</a> (杯具，需翻)</p>
<p>到项目目录下直接运行 gradle，编译成功有如下提示:<br />
<img src="http://img01.taobaocdn.com/bao/uploaded/i1/T1JtxwXnBeXXc3NVk._111121.jpg" alt="" /></p>
<p>如果直接运行 gradle --gui，还能以gui的模式来选择，非常人性化：<br />
<img src="http://img04.taobaocdn.com/bao/uploaded/i4/T1dI8wXXhqXXX_GaU._111317.jpg" alt="" /></p>
<p>本文作者：<br />
54chen(陈臻)，人人网分布式存储研究人员，业余时间混迹于各技术组织且乐此不疲。目前关注实施PHP培训。对flex等前端技术有一点研究。<br />
个人技术站点:<a href="http://www.54chen.com/"><span style="color: #0b3b8c;">http://www.54chen.com/</span></a> 。可以通过电子邮件 czhttp@gmail.com 联系到他。</p>
<p><strong>本文提到的网址</strong></p>
<p>Gradle: <a href="http://www.gradle.org">http://www.gradle.org</a></p>
<p>国内的评论：<a href="http://news.csdn.net/n/20090313/124106.html">http://news.csdn.net/n/20090313/124106.html</a></p>
<p>国外的一些讨论：<a href="http://stackoverflow.com/questions/1163173/why-use-gradle-instead-of-ant-or-maven">http://stackoverflow.com/questions/1163173/why-use-gradle-instead-of-ant-or-maven</a></p>
<br><br>想快点找到作者也可以到Twitter上留言: <a href="https://www.twitter.com/54chen" target="_blank">@54chen</a><br>或者你懒得带梯子上墙，请到新浪微博：<a href="http://t.sina.com.cn/54chen" target="_blank">@54chen</a>]]></content:encoded>
			<wfw:commentRss>http://www.54chen.com/java-ee/try-the-new-build-tools-gradle.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

