gradle构建工具_Gradle:我们需要另一个构建工具吗?

gradle构建工具

在Java开发的早期,我们要么没有太多的构建工具需求,要么就使用了其他环境中的工具。 我仍然记得构建shell脚本并创建用于开发Java的文件。 生成文件特别有趣,因为这是一个在设计时就没有考虑到Java的工具。 迁移到不同的操作系统环境也很困难。

那时我工作的地方是我们在Solaris上开发的,但是我们有一些项目同时在Windows和Solaris上存在-这是我们发现并开始使用“新”语言的原因之一,至少在那时是新的。 这使得Shell脚本无法使用,并且使文件充其量变得困难。

当蚂蚁出来时,我们跳了起来。 就像我们使用的语言一样,它是跨平台的。 这对我们来说是一个巨大的利益。

我记得当Maven出现时,存在一些阻力,因为我们有Ant。 但是到了此时,一些项目已经变得足够大,足够复杂,以至于编写和维护Ant文件是一件痛苦的事情。 随着war文件的出现以及从类路径中加载依赖项jar,查找,下载和安装每个项目的所有依赖项jar也越来越分散人们的注意力。 Maven对依赖管理的承诺以及按惯例简化构建使该工具成为多个项目的必备工具。 多年来,我工作过的许多商店都接受了Maven为编程环境带来的功能。

因此问题就变成了:有了如此强大的工具,我们还需要其他工具吗?

作为说明,我将回到成为程序员并从事建筑工作的日子。 因为我是公司所有者的儿子,所以我“得”在施工过程的所有领域工作。 我发现我真的很喜欢木锤。 它的手感很好,用它我可以轻松打出16便士的指甲。 所以我到处使用它; 我用它来做框架,铺上薄板岩,完成工作,盖屋顶,但在电气工作中却用的很少。

如果我使用了较轻的锤子,我很确定在密西西比州南部会有一些房屋,这些房屋的墙角散落的锤子把钉子钉得太深了(这是在板岩工作人员之前)用螺丝钉撑住岩石。 我还看到了屋顶人员从使用屋顶锤获得了多少好处。 如果我用过一根手指,我的手指断裂感可能会少很多。 道德:即使每个问题看起来都像钉子一样,并不是所有的锤子都是解决问题的正确方法。

关于Gradle

我最近一直在研究Gradle构建工具。 立即让我脱颖而出的一件事是,构建文件不是XML,属性文件或任何其他仅配置文本文件。 这是一个Groovy脚本。 从本文的第一部分开始,我想您可以说我已经有一段时间了。 在此之前,它是C和C ++。 基于C的语言,尤其是Java,对我来说是第二天性。 XML是我的代码输出的东西,或用于提供服务器或其他工具的配置。 我每天都在使用Java进行结构化方面的工作不如在Java中进行更多的工作。 基于Java的Groovy使我感到宾至如归。

本文的目的不是要从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传输到服务器或从服务器通过FTP发送类似的要求。 您可以使用来自Jibble的SimpleFTP之类的东西来满足该要求。 由于此文件是作为JAR文件提供的,您可以将其放在类路径中,因此可以像在此使用JFileChooser一样,在构建脚本中简单地使用它。

总之, Gradle是一种功能强大且用途广泛的工具,应在工具带中占据一席之地。

参考: Gradle:我们需要另一个构建工具吗? 从我们的JCG合作伙伴 Rik Scarborough在Keyhole Software博客上获得。

翻译自: https://www.javacodegeeks.com/2013/09/gradle-do-we-need-another-build-tool.html

gradle构建工具

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

db platform mysql_数据库移植: 从Oracle移植到MySQL 注意databasePlatform | 学步园

采用Spring框架、JPA操作数据库开发一个小网站过程中,遇到需要将数据库从Oracle移植到MySQL,在进行单元测试时遇到如下错误:Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown table SEQ_GEN_IDENTIT…

Java基本语法(14)--for循环结构

循环结构:在某些条件满足的情况下,反复执行特定代码的功能。 基本格式: for (①初始化部分; ②循环条件部分; ④迭代部分){ ③循环体部分; }如果①,④部分多条语句,语句之间用“,”…

Java 8中的功能接口是什么? @功能注释和示例

函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习lambda表达式和Stream API。除非您知道什么是功能接口以及lambda与它之间的关…

win10存储池_3个光威480G SSD组WIN10存储池,深度测试到底值不值得搞

上次由于我SSD不够,所以我用虚拟硬盘的方式,虚拟了3个VHDX硬盘,组了个奇偶校验的存储池,并且简单的做了测试。测试结果是,组存储池确实提高了我们的数据安全性。WIN10存储池,可以让我们玩家省去组RAID&…

求最大公约数最小公倍数

最大公约数小于两个数小的那个,最小公倍数大于两个数大的那个。 求最大公约数从大到小寻找,求最小公倍数从小到大寻找,也就是说循环方向。 import java.util.Scanner;public class JavaTest {public static void main(String[] args) {//从键…

biginteger和long精度_修复Long类型太长,而Java序列化JSON丢失精度问题的方法

造成原因:JS内置有32位整数,而number类型的安全整数是53位。如果超过53位,则精度会丢失。正如现在后台传来一个64位的Long型整数,因此超过了53位,所以后台返回的值和前台获取的值会不一样。Java序列化JSON时long型数值…

Java基本语法(15)--while循环结构do-while循环结构

基本格式 ①初始化部分 while(②循环条件部分){③循环体部分;④迭代部分; }①初始化部分; do{③循环体部分;④迭代部分; }while(②循环条件部分);注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。 while循环先判断后循环体&a…

截止角频率和截止频率的关系_开关电源的控制环截止频率和开关频率有什么关系?...

【新朋友】点击上方蓝字“电源之家”关注【老朋友】点击右上角按钮,分享到朋友圈电源之家官方技术③群:522815202(3000人群)(电源行业第一大技术交流QQ群)这个问题很专业,因此答案注定也专业而非科普,非电力电子专业小伙伴看不懂很…

restlet_Restlet框架– Hello World示例

restletRestlet是用于Java平台的轻量级,全面的开源REST框架。 Restlet适用于服务器和客户端Web应用程序。 它支持主要的Internet传输,数据格式和服务描述标准,例如HTTP和HTTPS,SMTP,XML,JSON,At…

mysql数据库表复制备份_mysql数据库的备份以及表格数据之间的复制

#####-------------mysql数据备份以及表间数据的复制-------------------#######----------------我的mysql学习(二)--------------------------#####mysql数据的导入和导出--这里承接上一部分#导出全部数据库该操作在mysql命令行外进行:导出数据格式如下&#xff1…

求100以内质数或者更多

方法① public class JavaTest {public static void main(String[] args) {Label1: for (int i 2;i < 100;i){for (int j 2;j < i;j){if (i % j 0){continue Label1;}};System.out.println(i);}} }方法② public class JavaTest {public static void main(String[] …

在运行时在Spring Cloud Config中刷新属性配置

在本系列Spring Cloud Config的教程系列中&#xff0c;我们将讨论在运行时刷新属性配置的过程&#xff0c;我们将使用Spring Boot致动器/refresh端点进行/refresh 。 此外&#xff0c;我们还将研究使用RefreshScope注释刷新Value属性。 在我的Spring Cloud Config的上一教程中…

pythonnumpy教程_Python学习教程:通俗易懂的Numpy入门教程

Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包&#xff0c;如数据分析工具pandas也是基于numpy构建的&#xff0c;机器学习包scikit-learn也大量使用了numpy方法。本文介绍了Numpy的n维数组在数据处理和分析的所有核心应用。目录如何构建numpy数组如何观察数…

break和continue关键字

break语句用于终止某个语句块的执行&#xff0c;用在循环中表示跳出循环。 continue只能使用在循环结构中&#xff0c;用于跳过其所在循环当次执行&#xff0c;进入下一次循环执行。 二者功能类似&#xff0c;但continue是终止本次循环&#xff0c;break是终止本层循环。 brea…

认识定制:JSON绑定概述系列

让我们看看自定义JSON绑定序列化和反序列化过程时 &#xff0c; 注释模型和运行时配置如何工作。 本系列的下一篇文章介绍JSON-B如何处理自定义对象的创建。 注解方法 使用注释方法&#xff0c;可以通过注释字段&#xff0c;JavaBean方法和类来定制默认的序列化和反序列化行为…

Java数组(1)--数组概述

数组(Array)&#xff0c;是多个相同类型数据按一定顺序排列的集合&#xff0c;并使用一个名字命名&#xff0c;并通过编号的方式对这些数据进行统一管理。 ①数组本身是引用数据类型&#xff0c;而数组中的元素可以是任何数据类型&#xff0c;包括基本数据类型和引用数据类型。…

css hack技巧_5种减少Hack的编码技巧

css hack技巧在本文中&#xff0c;我们将探讨五种方法&#xff0c;这些方法可以使用有效的编码来帮助垃圾回收器花费更少的CPU时间分配和释放内存&#xff0c;并减少GC开销。 较长的GC通常会导致我们的代码在回收内存时停止&#xff08;也称为“停止世界”&#xff09;。 一些…

mysql数据库全备_MySQL innobackupex全备是指什么

MySQL innobackupex全备是指什么发布时间&#xff1a;2020-06-03 10:10:31来源&#xff1a;51CTO阅读&#xff1a;133作者&#xff1a;三月下文主要给大家带来MySQL innobackupex全备是指什么&#xff0c;希望这些内容能够带给大家实际用处&#xff0c;这也是我编辑MySQL innob…

数组初始化使用(写)new与不使用(不写)new

首先&#xff0c;数组初始化时&#xff0c;写不写new没有区别的。int arr[] new int[]{ 3, 9, 8};或者int[] arr {3,9,8};编译器遇到 int a[] {3, 8, 9}; 会编译成和 int a[] new int[] {3, 8, 9}; 完全一样的中间代码。 ①不同于String类。String由于实现了常量池&#xf…

如何更改Spring Boot应用程序的默认端口

默认情况下&#xff0c;Spring Boot应用程序通过端口8080在嵌入式Tomcat上运行。为了更改默认端口&#xff0c;您只需要修改server.port属性&#xff0c;该属性将在运行时由Spring Boot应用程序自动读取。 在本教程中&#xff0c;我们提供了修改server.port属性的常用方法。 …