Maven和Gradle区别

Maven和Gradle区别分享知识传递快乐 Java 中主要有三大构建工具 Ant Maven 和 Gradle Ant 用的比较少 Maven 用的相对普遍 而 Gradle 的发展则将是未来的一种趋势 使用 Maven 需要有 pom xml 文件 使用 Gradle 需要有一个对应的 build gradle 文件 依赖管理系统 Maven 中用 groupId artifactId version 组成的 Coordination 坐标

分享知识 传递快乐

依赖管理系统

Maven中用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖。任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是Jar包,也可以是war包。一个典型的依赖引用如下所示:

 
  
         
   
     junit 
         
   
     junit 
         
   
     4.12 
         
   
     test 
    
   
  
         
   
     org.springframework 
         
   
     spring-test 
    
  

从上面可以看出当引用一个依赖时,version可以省略掉,这样在获取依赖时会选择最新的版本。而存储这些组件的仓库有远程仓库和本地仓库之分。远程仓库可以使用世界公用的central仓库,也可以使用Apache Nexus自建私有仓库;本地仓库则在本地计算机上。通过Maven安装目录下的settings.xml文件可以配置本地仓库的路径,以及采用的远程仓库的地址。

Gradle在设计的时候基本沿用了Maven的这套依赖管理体系。然后我将其转换成Gradle脚本,结果是惊人,在引用依赖方面变得非常简洁。

dependencies {     compile 'org.hibernate:hibernate-core:3.6.7.Final'     testCompile ‘junit: junit: 4. + ' }

Maven和Gradle对依赖项的scope有所不同。在Maven世界中,一个依赖项有6种scope,分别是complie(默认)、provided、runtime、test、system、import。而grade将其简化为了4种,compile、runtime、testCompile、testRuntime。

Gradle支持动态的版本依赖。在版本号后面使用+号的方式可以实现动态的版本管理。

Maven中央仓库已经成为了Java开发者不可或缺的资源,Gradle既然有依赖管理,那必然也得用到仓库,这当然也包括了Maven中央仓库,就像这样:

repositories {     mavenLocal()     mavenCentral()     mavenRepo urls: "http://repository.sonatype.org/content/groups/forge/" }

多模块构建

Maven将一个项目分解为多个模块已经是很通用的一种方式,在Maven中需要定义个parent POM作为一组module的聚合POM。在该POM中可以使用

标签来定义一组子模块。parent POM不会有什么实际构建产出。而parent POM中的build配置以及依赖配置都会自动继承给子module。

maven创建多模块

maven父工程pom.xml

 
   
   
   
     4.0.0 
    
   
     com.xh 
    
   
     ssm 
    
   
     0.0.1-SNAPSHOT 
    
   
     pom 
    
   
     ssm 
    
    
    
      ssm-mapper 
     
    
      ssm-service 
     
    
      ssm-web 
     
    
    
    
      ${project.artifactId} 
     
    
      utf-8 
     
    
      4.3.13.RELEASE 
     
    
    
     
     
     
       org.springframework 
      
     
       spring-aop 
      
     
       ${spring.version} 
      
     
     
     
       org.springframework 
      
     
       spring-aspects 
      
     
       ${spring.version} 
      
     ....... 
    
  

maven子工程pom.xml

 
   
   
   
     4.0.0 
    
    
    
      com.xh 
     
    
      ssm 
     
    
      0.0.1-SNAPSHOT 
     
    
   
     com.xh.ssm.web 
    
   
     ssm-web 
    
   
     0.0.1-SNAPSHOT 
    
   
     war 
    
   
     ssm-web Maven Webapp 
    
   
     http://maven.apache.org 
    
    
     
     
     
       com.xh.ssm.service 
      
     
       ssm-service 
      
     
       0.0.1-SNAPSHOT 
      
     
    
    
    
    
    
      ${project.name} 
     
     
      
      
        src/main/java 
       
       
       
         /*.properties 
        
       
         /*.xml 
        
       
      
        true 
       
      
      
      
        src/main/resources 
       
       
        
       
      
        true 
       
      
     
     
      
       
       
       
         org.apache.maven.plugins 
        
       
         maven-compiler-plugin 
        
       
         3.6.0 
        
        
        1.8 
         
           1.8 
          
         
           UTF-8 
          
          
          
            none 
           
           
        
       
      
     
    
   

而Gradle也支持多模块构建。而在parent的build.gradle中可以使用allprojects和subprojects代码块来分别定义里面的配置是应用于所有项目还是子项目。对于子模块的定义是放置在setttings.gradle文件中的。在gradle的设计当中,每个模块都是Project的对象实例。而在parent build.gradle中通过allprojects或subprojects可以对这些对象进行各种操作。这无疑比Maven要灵活的多。

gradle创建多模块

第一种:

1、创建多个独立gradle项目

Maven和Gradle区别

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

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

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

apply plugin: "java" //Java的JDK apply plugin: "eclipse" //eclipse项目插件 apply plugin: "war" //项目构建输出war repositories { // Use jcenter for resolving your dependencies. // You can declare any Maven/Ivy/file repository here. jcenter() } dependencies { compile project(':gradle-core') } 

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

Maven和Gradle区别

5、结果

Maven和Gradle区别

 

第二种:

1.新建Java项目

Maven和Gradle区别

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

build.gradle

subprojects { apply plugin: "java" //Java的JDK } 
rootProject.name = 'gradle-parent' include 'gradle-core'

3、新建空文件夹

Maven和Gradle区别

4、将项目转换成Gradle项目

Maven和Gradle区别

Maven和Gradle区别

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

Maven和Gradle区别

 

总的来说,gradle相比于maven有很大的灵活性,目前gradle的使用者越来越多。而由于maven之前处于主流,并且在某些方面maven较gradle还有一些优点,所以maven和gradle并存。在github上大多数优秀的开源项目会同时提供maven和gradle两种添加依赖的方式。

 

 

 

 

 

 

 

 

 

 

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215262.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:18
下一篇 2026年3月18日 下午2:19


相关推荐

  • ureport 显示html,UReport2 与业务结合

    ureport 显示html,UReport2 与业务结合本小节中我们将介绍如何在业务页面中展示报表、导出报表文件、引用报表内容等操作。报表相关URL在配置好一个包含UReport2的项目后,就可以运行我们的项目,打开UReport2的基于网页的报表设计器,它的地址如下:UReport2报表设计器URLhttp://host[:port][/context-path]/ureport/designer如果我们是在本地启动项目,并且服务器端口号为8080,…

    2025年7月3日
    10
  • 开源在线客服系统源码h5|thinkphp在线客服完整源码|网页在线客服源码

    开源在线客服系统源码h5|thinkphp在线客服完整源码|网页在线客服源码前言:法国阿纳托尔曾经说过:企业客服人员早上醒来后通常做的第一件事就是检查手机,看看是否有顾客发来的重要信息,这种行为已经成为我们日常生活方式的一部分。不管原因是什么,我们都有一套日常使用的通信工具电子邮件、电话、网络会议工具或社交网络。对于一个高效运行的企业而言,拥有一套好的源码搭建的在线客服系统,对于提供企业运行效率至关重要!随着流感大流行使在家工作成为一种新的常态,我们面临着前所未有的沟通方式的变化,这使得这些工具不仅是必不可少的,而且现在是必需的。正文:搭建在线客服系统软件的必要性:基于t

    2022年7月19日
    15
  • 详解linux中nano命令

    详解linux中nano命令

    2026年3月15日
    3
  • 使用Idea搭建SpringBoot项目

    使用Idea搭建SpringBoot项目IDEA 创建 springboot 项目

    2026年3月18日
    2
  • Unity 接入 ILRuntime 热更方案

    Unity 接入 ILRuntime 热更方案引言最近看了一下 ET 框架 本来只是研究一下网络模块 后来抽时间看一下热更框架 ET 的热更使用的不是像 tolua 这样基于 Lua 的方案 而是基于 ILRuntime 的纯 C 热更实现方案 ILRuntime 的实现原理对 Unity 引擎有一定了解的开发者都应该知道 Unity 支持使用 C 做脚本语言 是依赖 Mono 引擎运行 C 编译后的 IL 中间语言

    2026年3月18日
    1
  • svn用户名和密码设置_git配置本地用户名密码

    svn用户名和密码设置_git配置本地用户名密码SVN配置用户192.168.1.200   Administrator     ydd!@#$1234()90 1、备份D:\svn\conf\authz,再修改2、备份D:\svn\conf\passwd,再修改注意:* 权限配置文件中出现的用户名必须已在用户配置文件中定义。* 对权限配置文件的修改立即生效,不必重启s

    2025年11月7日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号