gradle和maven的区别

生活百科 2022-10-29 19:15www.ai-classes.cn生活常识

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

mavenLocal() maven 本地库

mavenCentral() : maven 远程库

mavenRepo urls: 自定义库路径

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

Maven:

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.7</version> 

<scope>test</scope>

</dependency>

Gradle:

dependencies {    testCompile group:'junit', na: 'junit', version '4.11'}

或者

dependencies {    testCompile 'junit:junit:4.11'    }

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

pile fileTree(dir: 'libs', include: '.jar'),在多个路径下时

jarTree = fileTree(dir: 'libs', include: '.jar')

rootTree = new File(rootProject.rootDir, 'libs').getAbsolutePath()

jarTree += fileTree(dir: rootTree, include: '.jar')

pile jarTree

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

mvn dependency:analyz查看依赖;

mvn dependency:tree 查看项目直接和传递依赖; 

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-na’)来引用子项目对应的Project对象。关于多项目配置有非常多,就简述一下常用的配置共享以及配置独享。

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

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

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

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

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

4、任务机制区别

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

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

Task listJars(description: 'Display pile jars.') << {

configurations.pile.each { File file -> println file.na }

以上就是小编今天的分享了,希望可以帮助到大家。

上一篇:python判断素数 下一篇:mysql distinct用法

Copyright © 2014-2025 Www.ai-classes.cn 爱句子网