Build tool

what:

Build tool(构建工具)是从源代码自动创建可执行应用程序的程序。构建包括将代码编译,链接和打包成可用或可执行的形式。在小项目中,开发人员通常会手动调用构建过程。这对于较大的项目来说是不实际的,在这些项目中,很难跟踪需要构建的内容,构建过程中的顺序和依赖关系。使用自动化工具可以使构建过程更加一致

how:

1、灵活性

谷歌选择Gradle作为Android官方构建工具 ; 不是因为构建脚本是代码,而是因为Gradle以最基本的方式可扩展的方式建模。Gradle的模型还允许它用于C / C ++的本地开发,并且可以扩展到涵盖任何生态系统。例如,Gradle的设计考虑了使用其Tooling API嵌入。

Gradle和Maven都提供了约定优于配置。然而,Maven提供了一个非常严格的模型,使定制变得乏味,有时甚至是不可能的。虽然这可以使任何给定的Maven构建更容易理解,但只要您没有任何特殊要求,它也会使它不适合许多自动化问题。另一方面,Gradle是在充分授权和负责任的用户的基础上构建的

2、性能

缩短构建时间是最快速发货的最直接方式之一。Gradle和Maven都采用某种形式的并行项目构建和并行依赖性解析。最大的区别是Gradle的工作避免和增量机制。使Gradle比Maven快得多的前3个功能是:

  • 增量 - Gradle通过跟踪任务的输入和输出并仅运行必要的操作来避免工作,并且只处理在可能的情况下更改的文件
  • 构建缓存 - 使用相同的输入(包括计算机之间)重用任何其他Gradle构建的构建输出。
  • Gradle守护进程 - 一种长期存在的进程,可将构建信息保持在内存中“热”。

Gradle与Maven性能比较中,这些和更多性能特性使Gradle在几乎每种情况下的速度至少快两倍(使用构建缓存的大型构建速度快100倍)

3、用户体验

Maven的任期较长意味着它通过IDE的支持对许多用户来说更好。但是,Gradle的IDE支持继续快速提升。例如,Gradle现在有一个基于Kotlin的DSL,可以提供更好的IDE体验。Gradle团队正在与IDE制造商合作,以更好地提供编辑支持 - 敬请关注更新。

虽然IDE很重要,但是大量用户更喜欢通过命令行界面执行构建操作。Gradle提供了一个现代CLI,具有可发现功能,如“gradle tasks”,以及改进的日志记录和命令行完成

最后,Gradle提供了一个基于Web的交互式UI,用于调试和优化构建:构建扫描。这些也可以在本地托管,以允许组织收集构建历史记录并进行趋势分析,比较构建以进行调试或优化构建时间。

4、依赖管理

两个构建系统都提供了内置功能,可以解析来自可配置存储库的依赖关系。两者都能够在本地缓存依赖项并并行下载它们。

作为库使用者,Maven允许覆盖依赖项,但仅限于版本。Gradle提供可自定义的依赖项选择替换规则,可以声明一次并在项目范围内处理不需要的依赖项。此替换机制使Gradle能够一起构建多个源项目以创建复合构建

Maven具有很少的内置依赖范围,它们在常见场景中强制使用笨拙的模块架构,例如使用测试夹具或代码生成。例如,单元测试和集成测试之间没有分离。Gradle允许自定义依赖项范围,从而提供更好的建模和更快的构建。

作为库生产者,Gradle允许生产者声明`api`和`implementation`依赖关系,以防止不需要的库泄漏到消费者的类路径中。Maven允许发布者通过可选的依赖项提供

总的来说,Gradle和Maven都是项目自动构建工具,编译源代码只是整个过程的一个方面,更重要的是,你要把你的软件发布到生产环境中来产生商业价值,所以,你要运行测试,构建分布、分析代码质量、甚至为不同目标环境提供不同版本,然后部署。整个过程进行自动化操作是很有必要的。

整个过程可以分成以下几个步骤:
编译源代码
运行单元测试和集成测试
执行静态代码分析、生成分析报告
创建发布版本
部署到目标环境
部署传递过程
执行冒烟测试和自动功能测试
如果你手工去执行每一个步骤无疑效率比较低而且容易出错,有了自动化构建你只需要自定义你的构建逻辑,剩下的事情交给工具去完成。

虽然两者都是项目工具,但是maven现在已经是行业标准,Gradle是后起之秀,很多人对他的了解都是从android studio中得到的,Gradle抛弃了Maven的基于XML的繁琐配置,众所周知XML的阅读体验比较差,对于机器来说虽然容易识别,但毕竟是由人去维护的。取而代之的是Gradle采用了领域特定语言Groovy的配置,大大简化了构建代码的行数,比如在Maven中你要引入一个依赖:

<properties>
<kaptcha.version>2.3</kaptcha.version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.code.kaptcha</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha.version}</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>

然后我将其转换成Gradle脚本,结果是惊人的:
dependencies {
compile('org.springframework:spring-core:2.5.6')
compile('org.springframework:spring-beans:2.5.6')
compile('org.springframework:spring-context:2.5.6')
compile('com.google.code.kaptcha:kaptcha:2.3:jdk15')
testCompile('junit:junit:4.7')
}

注意配置从原来的28行缩减至7行!这还不算我省略的一些父POM配置。依赖的groupId、artifactId、 version,scope甚至是classfier,一点都不少。较之于Maven或者Ant的XML配置脚本,Gradle使用的Grovvy脚本杀伤力太大了,爱美之心,人皆有之,相比于七旬老妇松松垮垮的皱纹,大家肯定都喜欢少女紧致的脸蛋,XML就是那老妇的皱纹。

Gradle给我最大的有点是两点。其一是简洁,基于Groovy的紧凑脚本实在让人爱不释手,在表述意图方面也没有什么不清晰的地方。其二是灵活,各种在Maven中难以下手的事情,在Gradle就是小菜一碟,比如修改现有的构建生命周期,几行配置就完成了,同样的事情,在Maven中你必须编写一个插件,那对于一个刚入门的用户来说,没个一两天几乎是不可能完成的任务

why:

git做版本控制,无论是否使用maven都行。
maven用来构建,可以通过添加maven repository(Maven仓库)中的依赖,减少项目中的jar数量,并且大的项目中模块交叉引用也能够用它很好地解决。
两者配合的方式,通过.gitignore文件中添加jar、target目录,可以避免将这些二进制文件、自动生成的文件加入到版本库中,从而减小版本库的大小,缩短同步时间。其他人同步之后,只需要执行maven命令,就能够自动从repo里面下载依赖,按照依赖树自底而上构建内部交叉依赖。
简单来说,maven让git不需要同步不必要的第三方库和自动生成的class、jar文件,并可以额外同步项目jdk版本等项目设置,标准化构建流程;git只是一个CVS工具,换成SVN、Mercurial也都可以。

但是,Maven有以下优点,

Maven是一个构建工具,服务与构建.使用Maven配置好项目后,输入简单的命令,如:mvn clean install,Maven会帮我们处理那些繁琐的任务.
Maven是跨平台的.
Maven最大化的消除了构建的重复.
Maven可以帮助我们标准化构建过程.所有的项目都是简单一致的,简化了学习成本.
总之,Maven作为一个构建工具,不仅帮我们自动化构建,还能抽象构建过程,提供构建任务实现.他跨平台,对外提供一致的操作接口,这一切足以使他成为优秀的,流行的构建工具.
但是Maven不仅是构建工具,他还是一个依赖管理工具和项目信息管理工具.他还提供了中央仓库,能帮我们自动下载构件.

 

Gradle和Maven都是项目自动构建工具,编译源代码只是整个过程的一个方面,更重要的是,你要把你的软件发布到生产环境中来产生商业价值,所以,你要运行测试,构建分布、分析代码质量、甚至为不同目标环境提供不同版本,然后部署。整个过程进行自动化操作是很有必要的。

整个过程可以分成以下几个步骤:
编译源代码
运行单元测试和集成测试
执行静态代码分析、生成分析报告
创建发布版本
部署到目标环境
部署传递过程
执行冒烟测试和自动功能测试
如果你手工去执行每一个步骤无疑效率比较低而且容易出错,有了自动化构建你只需要自定义你的构建逻辑,剩下的事情交给工具去完成。

虽然两者都是项目工具,但是maven现在已经是行业标准,Gradle是后起之秀,很多人对他的了解都是从android studio中得到的,Gradle抛弃了Maven的基于XML的繁琐配置,众所周知XML的阅读体验比较差,对于机器来说虽然容易识别,但毕竟是由人去维护的。取而代之的是Gradle采用了领域特定语言Groovy的配置,大大简化了构建代码的行数,比如在Maven中你要引入一个依赖:

<properties>
<kaptcha.version>2.3</kaptcha.version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.code.kaptcha</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha.version}</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>

然后我将其转换成Gradle脚本,结果是惊人的:
dependencies {
compile('org.springframework:spring-core:2.5.6')
compile('org.springframework:spring-beans:2.5.6')
compile('org.springframework:spring-context:2.5.6')
compile('com.google.code.kaptcha:kaptcha:2.3:jdk15')
testCompile('junit:junit:4.7')
}

注意配置从原来的28行缩减至7行!这还不算我省略的一些父POM配置。依赖的groupId、artifactId、 version,scope甚至是classfier,一点都不少。较之于Maven或者Ant的XML配置脚本,Gradle使用的Grovvy脚本杀伤力太大了,爱美之心,人皆有之,相比于七旬老妇松松垮垮的皱纹,大家肯定都喜欢少女紧致的脸蛋,XML就是那老妇的皱纹。

Gradle给我最大的有点是两点。其一是简洁,基于Groovy的紧凑脚本实在让人爱不释手,在表述意图方面也没有什么不清晰的地方。其二是灵活,各种在Maven中难以下手的事情,在Gradle就是小菜一碟,比如修改现有的构建生命周期,几行配置就完成了,同样的事情,在Maven中你必须编写一个插件,那对于一个刚入门的用户来说,没个一两天几乎是不可能完成的任务

原文地址:https://www.cnblogs.com/xasdh/p/10476817.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


安装环境都很简单,就是下载工具需要在华为开发者联盟里注册,然后认证,扫码认证我这边是不可以的,人工认证需要两个工作日审核安装成功之后遇到了很多报错,网上都是可以解决的,遇到下面这个报错网上查了很多方式也解决不了,于是记录一下  找了很久,发现网上说的我都配置了,添加 allow
上传的方式有两种,第一种是通过bintray官方出的插件bintray/gradle-bintray-plugin第二种是一个国外组织开源的插件novoda/bintray-release 这里讲bintray/gradle-bintray-plugin  1.在项目根目录下的 build.gradle 添加插件依赖 dependencies{classpat
转载自: 完美解决Error:SSLpeershutdownincorrectly打开gradle文件夹下的gradle-wrapper文件修改其中的配置文件将红色区域修改为http://services.gradle.org/distributions/等待编译完成
https://www.jianshu.com/p/9220227cdfb3buildscript{ext.kotlin_version='1.2.71'repositories{google()jcenter()}dependencies{//classpath'com.android.tools.build:gradle:3.1.0-alpha09'
Markdown版本笔记我的GitHub首页我的博客我的微信我的邮箱MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantao@sina.com发布库到仓库mavenjcenterJitPackMD目录目录通过AS创建aar的步骤发布到Github仓库【推荐】创建项目配置项目构建并上传上传
 跟着教程做的,已经有了JDK,直接进行后面的步骤,下载安装AndroidSDK没有FQ,教程里的网址打不开,就换了个。网址http:/ools.android-studio.org/index.php/sdk下的.exe  nextinstall然后就是漫长的等待 ……先这样吧开始下载AndroidStudio,网址http://www.and
今天更新了universal-image-loader-1.9.5.jar文件,studio死活找不到其中相关的类,上网百度试了很多办法,总算解决了,具体方法跟一篇老外的帖子的差不多,这里分享下。 解决步骤:Somethingwentwronginincrementalbuildsystem.Oneofthisshouldhelp:MenuBuild->Rebuild
https://blog.csdn.net/zxc514257857/article/details/80425711编写不易,如有转载,请声明出处:梦回河口:https://blog.csdn.net/zxc514257857/article/details/80425711报错一:Error:Unabletofindmethod'com.android.build.gradle.tasks.factory.AndroidJavaCompile.setDepe
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow                     创建兼容AndroidStudio和eclipse的AS工程虽然我的博客名叫eclipse_xu,但是我已经将
gradle跳过测试直接编译gradlebuild-xtest  根据build.gradle和setting.gradle文件生成idea项目:gradleidea  gradle这几年发展迅猛,github越来越多的项目都开始采用gradle来构建了,但是并不是所有人都对gradle很熟悉,下面的方法可以把gradle转成maven项目,前提gradle项
本地仓库配置配置环境变量GRADLE_USER_HOME,并指向你的一个本地目录,用来保存Gradle下载的依赖包。 远程仓库配置一般Gradle、maven从中央仓库mavenCentral()http:/epo1.maven.org/maven2/下载依赖包,但是在国内下载速度巨慢,我们只能使用国内的镜像。所以每个Gradle构建的项目
what:Buildtool(构建工具)是从源代码自动创建可执行应用程序的程序。构建包括将代码编译,链接和打包成可用或可执行的形式。在小项目中,开发人员通常会手动调用构建过程。这对于较大的项目来说是不实际的,在这些项目中,很难跟踪需要构建的内容,构建过程中的顺序和依赖关系。使用自动化工
说明:该示例为在windows系统下自动化部署springboot架构:springboot+github+gradle+jdk8各种配置步骤及截图说明:1、配置git,gradle及jdk  系统管理→全局工具配置  说明:其中git配置项中的PathtoGitexecutable要指到git.exe文件,maven的配置方式和gradle类似
AndoridStudio模块化开发相关配置下面以宿主APP模块和Uer_Module模块为例:第一步:在项目根目录gradle.properties配置文件中添加如下代码isNeedUserModule=true#isNeedUserModule=false 第二步在user_module中的build.gradle文件中加入了如下代码来控制此库是library还
buildtools构建工具能够帮助你创建一个可重复的、可靠的、携带的且不需要手动干预的构建。构建工具是一个可编程的工具,它能够让你以可执行和有序的任务来表达自动化需求。假设你想要编译源代码,将生成的class文件拷贝到某个目录,然后将该目录组装成可交付的软件。如下图所示,展示了所
Git及用法Git是目前世界上最先进的分布式版本控制系统。Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上
打release包的时候,出现这个玩意,但debug直接跑apk又没问题。Causedby:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:ExpectedanamebutwasSTRINGatline1column99path$[0].apkInfo.versionNameatcom.google.gson.internal.bind.
android\gradle\wrapper\gradle-wrapper.properties由distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/distsdistributionUrl=https\://services.gradle.org/distributions/gradle-2.12.1-all.
1.上传本地仓库1.1build.gradle项目设置plugins{id'java'id'maven'//引入maven插件}group'com.inkyi'//包名version'1.0.1-SNAPSHOT'//版本号1.2 build.gradle上传设置//指定上传的路径deflocalMavenRepo='file://'+new
Gradle的Emas服务插件会加载您下载的aliyun-emas-services.json文件。请修改工程的build.gradle使用该插件。配置步骤如下:1.修改项目级目录下build.gradle({project}/build.gradle):1buildscript{2repositories{3maven{4url'http://maven.aliyun.com