• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

gradle和maven区别

武飞扬头像
寰宇飘然
帮助1

Gradle和maven相似点

1.gradle考虑到maven库的价值,在jar包管理上完全支持maven Repository,很多属性一看就能反应过来maven中对应的是什么标签,降低maven到gradle的迁移难度,并在构建方面改善了很多maven的不足,

2.radle对比maven更好的面向ant用户,使用maven时,虽然能通过plugin来跑ant的命令,但是maven在任务实现主要靠的是插件以及自身的固定框架,Gradle在定义任务方面思想与ant非常相似,做了很好的集成。

Gradle和maven的不同处

1.基础配置信息

maven使用.pom文件,基于XML,gradle使用.gradle文件,基于Groovy,gradle去掉maven中需要固定配置的groupId,artfactId,package等基本参数,通过 apply plugin: 'java',apply plugin: 'war'来表示打包方式,也提供sourceCompatibility,version等一些实用的标签。

2.依赖管理

 Gradle的jar包管理支持maven下Repository方式,也支持Ant的Ivy方式,由于maven的Repository已经非常成熟,gradle在兼容Repository做得非常方便,定义maven的repository:

  1.  
    mavenLocal() :maven 本地库
  2.  
    mavenCentral() : maven 远程库
  3.  
    mavenRepo urls: 自定义库路径

maven通过groupId、name和version到配置的Repository里寻找指定依赖中的Jar包。Gradle的生命周期更为复杂,但也支持Maven依赖中的构建生命周期,compile、runtime、testCompile和testRuntime分别对应项目不同阶段的依赖。 并且还简化maven的配置命令。

  1.  
    Maven:
  2.  
    <dependency>
  3.  
    <groupId>junit</groupId>
  4.  
    <artifactId>junit</artifactId>
  5.  
    <version>4.7</version>
  6.  
    <scope>test</scope>
  7.  
    </dependency>
  8.  
     
  9.  
     
  10.  
    Gradle:
  11.  
    dependencies { testCompile group:'junit', name: 'junit', version '4.11'}
  12.  
    或者
  13.  
    dependencies { testCompile 'junit:junit:4.11' }

如果需要引用自己lib目录下jar包,maven需要在每个依赖加上<scope> 和<systemPath>标签或者在plugin里单独增加编译路径。而Gradle只需要加上

  1.  
    compile fileTree(dir: 'libs', include: '*.jar'),在多个路径下时:
  2.  
    jarTree = fileTree(dir: 'libs', include: '*.jar')
  3.  
    rootTree = new File(rootProject.rootDir, 'libs').getAbsolutePath()
  4.  
    jarTree = fileTree(dir: rootTree, include: '*.jar')
  5.  
    compile jarTree

在依赖相关的命令行方面,gradle与maven比较相似,maven常用的分析依赖命令包括:

  1.  
    mvn dependency:analyz查看依赖;
  2.  
    mvn dependency:tree 查看项目直接和传递依赖;
  3.  
    mvn help:effective-pom查看有效的pom;

在gradle中使用gradle dependencies 可以查看项目中包的依赖关系。加上-configuration来查看指定阶段的依赖情况,还可以-dependency来查看指定jar的依赖情况。

3.多项目管理

实际使用中,往往需要管理的都不是单单一个项目,maven使用依赖,继承,组成的概念,在父模块指定自己的子模块,并且准备一些各个子模块公用的资源,如插件,配置信息等等。将打包的模块与实现具体功能的模块分开的做法来管理多个项目。Gradle在这一方面做得更加清楚,划分更明确,学习gradle的多项目管理也很容易,在eclipse中安装完gradle插件之后,新建一个Gradle工程,选择flat-java-multiproject,生成的工程就是多项目管理一个示例。

Gradle通过settings.gradle文件来指定工程的子项目,在构建的初始化阶段(Initialization),Gradle会根据settings.gradle 文件来判断有哪些子项目被include到了构建中,并为每一个子项目初始化一个Project对象,在构建脚本中通过project(‘:sub-project-name’)来引用子项目对应的Project对象。关于多项目配置有非常多,因此就简述一下常用的配置共享以及配置独享。

Allprojects属性,返回该Project对象以及其所有子项目。

subprojects属性,返回该Project所有子项目。

project(‘:sub-project-name’)来设置对应的子项目的配置。

configure(subprojects.findAll {it.name.contains('XXX')})来找符合要求的子项目。

在子项目的build.gradle文件里添加自己独有的配置

4.任务机制

Maven相对于ant相比仅仅通过plugin提供任务机制,相比而言自由度小而且很难扩展,每定义一个功能都需要写一个插件,Ant中使用tagret标签的echo来指定命令,gradle使用groovy语言,自带task概念,与ant使用的build文件更加接近。一个Task表示一个逻辑上的执行单元。

Gradle编写task的方式有很多,网上也能很容易搜索到相关的例子,在此简述有关task的一些实用命令以及自己一个常用的task

  1.  
    Task listJars(description: 'Display compile jars.') << {
  2.  
    configurations.compile.each { File file -> println file.name }
  3.  
    }

这个task可以显示出当前项目下所有用于 compile 的 jar。

常用命令:

1. Task可以通过全名调用、前缀调用或首字母调用。

2. gradle XXX -s/ gradle XXX -S

当执行task有错误时,可以使用-s来查询详细的错误堆栈,-S输出全部堆栈信息。

3. -continue

比如执行gradle clean install -continue,即使遇到某些task失败也不会停止后续task的执行,一次性得到所有的构建错误。

4. Gradle tasks / Gradle tasks all

显示出当前目录下所有的task以及显示出task之间的依赖关系。

gradle创建多模块

1、创建多个独立gradle项目

学新通

2、编辑模块gradle-api的settings.gradle文件:

  1.  
    rootProject.name = 'gradle-api'
  2.  
     
  3.  
    include ':gradle-core'
  4.  
    project(':gradle-core').projectDir = new File(settingsDir, '../gradle-core')

 3、编辑模块gradle-api的build.gradle文件:

  1.  
    apply plugin: "java" //Java的JDK
  2.  
    apply plugin: "eclipse" //eclipse项目插件
  3.  
    apply plugin: "war" //项目构建输出war
  4.  
     
  5.  
    repositories {
  6.  
    // Use jcenter for resolving your dependencies.
  7.  
    // You can declare any Maven/Ivy/file repository here.
  8.  
    jcenter()
  9.  
    }
  10.  
     
  11.  
    dependencies {
  12.  
    compile project(':gradle-core')
  13.  
    }

4、完成后,执行 Gradle  -> Refresh Gradle Project

学新通

5、结果

学新通 

第二种创建方式: 

1.新建Java项目

学新通

2.添加build.gradle、settings.gradle文件 

 build.gradle

  1.  
    subprojects {
  2.  
    apply plugin: "java" //Java的JDK
  3.  
     
  4.  
    }

settings.gradle

  1.  
    rootProject.name = 'gradle-parent'
  2.  
     
  3.  
    include 'gradle-core'

3、新建空文件夹

学新通

4、将项目转换成Gradle项目

学新通 

学新通 

5、复制项目路径,右击gradle-parent,导入Gradle项目

学新通 

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfgfbai
系列文章
更多 icon
同类精品
更多 icon
继续加载