初识gradle maven概念

之前看一些开源代码,都很少去剖根问底的学习一些概念。用了很久Eclipse + ADT开发android项目,这次安装了android studio来写一个android项目,发现导入时有两个选项。如下:

这才百度了下,才知道一直使用IDE的都忘了项目的创建原理,一般而言,一个比较正规的项目都不会基于IDE 进行构建..一般会用ant, maven, gradle ,为什么不用ide 呢?首先,是IDE的选择,有人喜欢,用vim,eclipse,intellijidea,收费的,免费的。特别是公开的项目,你用什么IDE 相当于为这个IDE 打广告了。

所以,一般而言都是用构建工具,而不是IDE .实际上各种IDE 也是基于各种构建系统,也正是不同的IDE,它们的构建方式不同,所以要让不同的IDE间能一起开发,于是需要一个统一的构建工具,只是你平时不关注而已。扯到构建工具, 一般c/c++ 项目用make,或者 premake. 而java 一般是ant,ivy,gradle,maven,还有直接的shell, 里面有好多没听过的,囧。比如经常使用github就应该经常看到maven这个东西。

下面主要说下ANT,Maven和Gradle不同:

1、Maven与Ant比较

Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。Maven除了具备Ant的功能外,还增加了以下主要的功能:

1)使用Project Object Model来对软件项目管理;

2)内置了更多的隐式规则,使得构建文件更加简单;

3)内置依赖管理和Repository来实现依赖的管理和统一存储;

4)内置了软件构建的生命周期;

 

一 POM(Project Object Model)与项目管理

每一个Maven工程都包含一个pom.xml文件,其他存储了该工程相关的信息,从而达到一定的项目管理的功能。例如包含了工程的配置,缺陷跟踪系统信息,工程的组织,许可协议,工程的路径,依赖等信息。

典型的pom.xml如下:

<project … >

<modelVersion>4.0.0</modelVersion>

<!-- The Basics -->

<groupId>...</groupId>

< artifactId>...</artifactId>

< version>...</version>

< packaging>...</packaging>

< dependencies>...</dependencies>

< parent>...</parent>

< dependencyManagement>...</dependencyManagement>

< modules>...</modules>

< properties>...</properties>

<!-- Build Settings -->

<build>...</build>

< reporting>...</reporting>

<!-- Project Meta Data -->

<name>...</name>

< description>...</description>

< url>...</url>

< inceptionYear>...</inceptionYear>

< licenses>...</licenses>

< organization>...</organization>

<developers>...</developers>

< contributors>...</contributors>

<!-- Environment -->

<issueManagement>...</issueManagement>

< ciManagement>...</ciManagement>

< mailingLists>...</mailingLists>

< scm>...</scm>

< prerequisites>...</prerequisites>

< repositories>...</repositories>

< pluginRepositories>...</pluginRepositories>

< distributionManagement>...</distributionManagement>

< profiles>...</profiles>

< /project>

 

二 隐形的规则和简单的构建文件

Maven工程的目录结构必须为如下的结构

Maven还有内置的构建生命周期,内置定义了build,test,package,deploy等task。

由于Maven工程目录的规则和内置的构建生命周期,从而使得构建文件简单,例如如下的构建文件中甚至没有出现build,package等task的定义,但是我们已经可以调用wvm package等内置的task了:

<project xmlns="http://maven.apache.org/POM/4.0.0"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0                       http://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelVersion>4.0.0</modelVersion>   <groupId>com.mycompany.app</groupId>   <artifactId>my-app</artifactId>   <packaging>jar</packaging>   <version>1.0-SNAPSHOT</version>   <name>Maven Quick Start Archetype</name>   <url>http://maven.apache.org</url>   <dependencies>     <dependency>       <groupId>junit</groupId>       <artifactId>junit</artifactId>       <version>3.8.1</version>       <scope>test</scope>     </dependency>   </dependencies> </project>

 

三 依赖管理和Repository

Maven的dependence management用来管理所有此project的dependences,且在dependence repository中自动查找和下载dependence。

1) 依赖管理

例如工程以来MySQL如下:

<dependencyManagement>

< dependencies>

< dependency>

< groupId>mysql</groupId>

< artifactId>mysql-connector-java</artifactId>

< version>5.1.2</version>

< /dependency>

< dependencies>

< /dependencyManagement>

<dependency>

< groupId>mysql</groupId>

< artifactId>mysql-connector-java</artifactId>

< /dependency>

2)dependence repository

更好的办法是公司或每个team有自己的repository,例如下图:


四 构建生命周期的定义

构建生命周期显式地定义了构建,测试,和发布的过程,是每个Maven工程的核心。Maven包含了3个内置的生命周期:default,clean和site。

1)default生命周期处理了工程的编译,测试和部署,他一共包含20多个阶段,主要的阶段如下:

Validate: 验证所有的工程信息是否可用且正确

Compile: 编译源代码

Test: 在一套framework下运行但愿测试

Package: 以发布的格式打包编译的代码

Integration-test: 在集成测试环境中处理(部署)发布包

Verify: 检测发布包是否正确可用

Install: 在本地的repository上安装发布包

Deploy: 在远程的repository上安装发布包

以上的阶段具有先后顺序,执行某个阶段时,此阶段前的所有阶段都会被自动地执行。

2)clean生命周期处理工程的清理工作,包含3个阶段:pre-clean, clean, post-clean。

3)site生命周期处理工程site文档的生成和部署,包含下列阶段:

pre-site, site, post-site 和site-deploy,其中site-deploy用来将site文档部署到指定的web server上。

Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。因此,由于 Maven 和 Ant 代表两个差异很大的工具。

2、Gradle

是以 Groovy 语言为基础,面向Java应用为主。基于DSL(领域特定语言)语法的自动化构建工具。

Ø gradle对多工程的构建支持很出色,工程依赖是gradle的第一公民。

Ø gradle支持局部构建。

  Ø 支持多方式依赖管理:包括从maven远程仓库、nexus私服、ivy仓库以及本地文件系统的jars或者dirs

Ø gradle是第一个构建集成工具(the first build integration tool),与ant、maven、ivy有良好的相容相关性。

Ø 轻松迁移:gradle适用于任何结构的工程(Gradle can adapt to any structure you have.)。你可以在同一个开发平台平行构建原工程和gradle工程。通常要求写相关测试,以保证开发的插件的相似性,这种迁移可以减少破坏性,尽可能的可靠。这也是重构的最佳实践。

Ø gradle的整体设计是以作为一种语言为导向的,而非成为一个严格死板的框架。

Ø 免费开源

gradle提供了什么

1.一种可切换的,像maven一样的基于约定的构建框架,却又从不锁住你(约定优于配置)

Switchable, build-by-convention frameworks a la Maven. But we never lock you in!

2. 强大的支持多工程的构建

3. 强大的依赖管理(基于Apache Ivy),提供最大的便利去构建你的工程

Language for dependency based programming

4. 全力支持已有的Maven或者Ivy仓库基础建设

5. 支持传递性依赖管理,在不需要远程仓库和pom.xml和ivy配置文件的前提下

6 基于groovy脚本构建,其 build脚本使用 groovy语言编写

7 具有广泛的领域模型支持你的构建A rich domain model for describing your build.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值