Gradle:我们需要另一个构建工具吗?
在Java开发的早期,我们要么没有太多的构建工具需求,要么就使用了其他环境中的工具。 我仍然记得构建shell脚本并创建用于开发Java的文件。 生成文件特别有趣,因为这是一个在设计时就没有考虑Java的工具。 迁移到不同的操作系统环境也很困难。
那时我工作的地方是我们在Solaris上开发的,但是我们有一些项目在Windows和Solaris上都存在-这是我们发现并开始使用“新”语言的原因之一,至少在那时是新的。 这使得Shell脚本无法使用,并且使文件充其量变得困难。
当蚂蚁出来时,我们跳了起来。 就像我们使用的语言一样,它是跨平台的。 这对我们来说是一个巨大的利益。
我记得当Maven出现时,存在一些阻力,因为我们有Ant。 但是到了此时,一些项目已经变得足够大,足够复杂,以至于编写和维护Ant文件是一件痛苦的事情。 随着war文件的出现和从类路径中加载依赖项jar的出现,查找,下载和安装每个项目的所有依赖项jar也变得分心。 Maven的依赖管理承诺以及按惯例简化构建使该工具成为多个项目的必备工具。 多年来,我工作过的许多商店都接受了Maven为编程环境带来的功能。
于是问题就变成了:有了如此强大的工具,我们还需要其他工具吗?
作为说明,我将回到我成为程序员和从事建筑工作之前的日子。 因为我是公司所有者的儿子,所以我“得”在施工过程的所有领域工作。 我发现我真的很喜欢木锤。 它的手感很好,用它我可以轻松打出16便士的指甲。 所以我到处使用它; 我用它来做框架,铺上薄板岩,完成工作,盖屋顶,但在电气工作中却很少。
如果我使用了较轻的锤子,我很确定在密西西比州南部会有一些房屋,这些房屋的墙角散落的锤子把钉子钉得太深了(这是在板岩工作人员之前)用螺丝钉固定住片岩)。 我还看到了屋顶人员从使用屋顶锤获得了多少好处。 如果我用过一根手指,我的手指断裂感可能会少很多。 道德:即使每个问题看起来都像钉子,但并非所有的锤子都是解决问题的正确方法。
关于摇篮
我最近一直在研究Gradle构建工具。 立即让我脱颖而出的一件事是,构建文件不是XML,属性文件或任何其他仅配置文本文件。 这是一个Groovy脚本。 从本文的第一部分开始,我认为您可以说我已经有一段时间了。 在此之前,它是C和C ++。 基于C的语言,尤其是Java,对我来说是第二天性。 XML是我的代码输出的东西,或用于提供服务器或其他工具的配置。 我每天都在使用Java进行结构化方面的工作不如在Java中进行更多的工作。 我对Groovy感到很自在,因为它基于Java。
本文的目的不是要从Maven切换到Gradle,而是要解释为什么Gradle应该出现在您的工具带中。 史蒂夫·埃伯索尔(Steve Ebersole) 撰写了一篇很棒的文章,介绍了为何Hibernate出于自己的开发需求而从Maven迁移到Gradle。 在我看来,当您的项目可以或应该使用Maven约定时,Maven仍然是一个很好的工具。
这也不意味着是有关如何使用Gradle的教程。 已经有一些不错的入门场所,包括Gradle网站上的用户指南。
Gradle提供了与IDE的良好集成。 Netbeans的最新版本尤其适用于Gradle。 Gradle有一个更好的多模块构建系统,其插件系统功能强大且简单明了,就像编写插件一样。 在我看来,它是一个编写良好且成熟的构建工具。
一个实际的例子
对我而言,Gradle最强大的功能是脚本是代码。 确切地说,很时髦。 有时我们都会遇到对项目有一个要求的项目,这些要求将它们与其他项目区分开来。 有几次我编写了快速的Griffon项目来维护配置数据,否则我将不得不为其维护SQL脚本。 Griffon是一个Groovy快速桌面应用程序环境,用于生成可作为可运行JAR文件或applet部署的独立应用程序。 当我必须进行更改时,然后必须将其复制到我从中运行应用程序的目录中,或复制到网络中以供其他人运行。
Gradle允许我编写该逻辑构建脚本。 由于Gradle基于Groovy,因此它附带了所有Groovy以及Java的工具和库。 例如,添加一个Swing对话框来选择将JAR复制到哪个目录,然后进行复制,就像将代码添加到构建文件一样简单:
import javax.swing.JFileChooserdef dirDialog = new JFileChooser(dialogTitle: "Choose directory to copy jar to",fileSelectionMode: JFileChooser.DIRECTORIES_ONLY,approveButtonText: "Set directory",acceptAllFileFilterUsed: false
)task copyJar(type: Copy) {from 'build/libs/DocExample.jar'def targetDir = dirDialog.showSaveDialog()if(targetDir == JFileChooser.APPROVE_OPTION ) {targetDir = dirDialog.getSelectedFile()into targetDir}
}
然后从您的IDE或命令行运行copyJar,执行任务以选择目录并复制文件。
好的,这可能有点虚构,但请考虑在构建过程中将文件通过FTP与服务器之间的相似要求。 您可以使用来自Jibble的SimpleFTP之类的东西来满足该要求。 由于此文件是作为JAR文件提供的,您可以将其放在类路径中,因此可以像在此使用JFileChooser一样,在构建脚本中简单地使用它。
总之, Gradle是功能强大且用途广泛的工具,应在工具带中占据一席之地。
翻译自: https://www.javacodegeeks.com/2013/09/gradle-do-we-need-another-build-tool.html
Gradle:我们需要另一个构建工具吗?相关推荐
- gradle构建工具_Gradle:我们需要另一个构建工具吗?
gradle构建工具 在Java开发的早期,我们要么没有太多的构建工具需求,要么就使用了其他环境中的工具. 我仍然记得构建shell脚本并创建用于开发Java的文件. 生成文件特别有趣,因为这是一个在 ...
- Gradle构建工具的学习与使用
http://my.eoe.cn/william_sim/archive/10691.html Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动 ...
- 更快的Maven构建工具mvnd和Gradle哪个性能更好?
作者 | 磊哥 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) Maven 作为经典的项目构建工具相信很多人已经用很久了,但如果体验过 Gradl ...
- Java构建工具:Maven与Gradle的对比
在Java码农的世界里,构建工具一直是一个不可或缺的元素.一开始,世上是只有一个构建工具的那就是Make后来发展为GNU Make.但是由于需求的不断涌现,这个小圈子里又逐渐衍生出其他千奇百怪的构建工 ...
- iOS应用模块化的思考及落地方案(二)模块化自动构建工具的使用
1.0 iOS模块化中的问题 前文已经介绍了模块化的流程及一些常见的问题,我们在这里再次总结一下. 在工作中,当我们开始一个新项目的时候,最先考虑的就是模块化工作. 模块化工作的想法是很美好的,可是执 ...
- pika开源:替代WebPack的全新JS构建工具
在过去几年中,JavaScript打包已经从一种生产环境优化手段演变成几乎所有Web App都必不可少的构建步骤.不管你喜欢与否,打包器已经给Web开发带来了巨大的复杂性,这是个不争的事实. 为什么要 ...
- c++构建工具之shell,configure,make,cmake,scons,xmake简析总结
前言 说到编译工具,在windows下必言vs,在linux下必言make. 0.shell 如果编译一个库的命令太复杂或者为了方便,我们更愿意将编译命令写成一个shell脚本来执行,比如build. ...
- gulp前端自动化构建工具:常用插件介绍及使用
Gulp是基于Node.js的一个构建工具(自动任务运行器),开发者可以使用它构建自动化工作流程(前端集成开发环境).一些常见.重复的任务,例如:网页自动刷新.CSS预处理.代码检测.压缩图片.等 ...
- 今天说说构建工具 depot_tools
---------------------------------------------------------------------------------------------------- ...
最新文章
- python2.7装饰器使用_python 函数 装饰器的使用方法
- jdk 1.8 不可变常量_在JDK 10中不可变与不可修改
- mimo雷达信号处理_雷达学术入门脉冲雷达信号处理概述
- python3.5兼容2.7吗_Python版本2.7切3.5和3.5切2.7
- 网页html转为pdf,html页面转换成PDF文件
- [转载] Python---函数式编程(map()、filter()和reduce())总结
- Linux突然无法使用,是内存不足的问题
- Java图形组件 OpenSwing
- 记录一次面试中的HTTP请求相关问题
- android dagger2 讲解,dagger 2 详解
- 微信小程序的页面布局(1)
- idea Process finished with exit code -1073741819 (0xC0000005)
- 星际争霸环境旧版本replay回放无法观看问题
- ftp同步工具,6款最值得推荐的ftp同步工具
- 迈向高算力、跨域融合新拐点,智能座舱各路玩家如何卡位?
- kali linux查询自己的ip,Kali Linux常用服务配置教程获取IP地址
- 台式计算机的电流是多少安,电脑usb支持瞬间电流是多大?
- 与matlab里面 imadjust 函数相同的python代码
- JFreeChart的正确使用列子
- 在Java 应用程序中访问USB设备
热门文章
- 19年8月 字母哥 第五章 静态资源与模板引擎的整合 用热点公司网不行
- latex 数学公式_技能分享——LaTeX篇I
- jenkins安装与配置windows_Windows下Scoop安装、配置与使用
- Mac 环境变量配置
- jdk8 cms g1gc_JDK 14:CMS GC是OBE
- jvm 宕机 打印jvm_通过入侵JVM打印阵列
- 高性能 高可用 可弹性伸缩_性能,可伸缩性和活力
- hibernate jpa_JPA /Hibernate刷新策略初学者指南
- java初学者面试_Java面试的前50个问题,面向初学者和经验丰富的程序员
- 带Spring Boot的GWT