3

12字真言,教你如何选择Gradle和Maven

 11 months ago
source link: https://www.51cto.com/article/768823.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

12字真言,教你如何选择Gradle和Maven

作者:迷路的架构师 2023-10-07 14:15:03

在软件开发领域,构建工具对于自动化编译、测试和打包代码过程至关重要。Gradle 和 Maven 是当今最流行的两种构建工具,每种工具都有自己的一套功能和优点。

71b5c709089dba02ecb0338ee2e09f93644588.jpg

在软件开发领域,构建工具对于自动化编译、测试和打包代码过程至关重要。Gradle 和 Maven 是当今最流行的两种构建工具,每种工具都有自己的一套功能和优点。

Gradle 是一种现代构建自动化工具,设计灵活且可扩展,使其成为开发人员的热门选择。它构建在 Groovy 编程语言之上,具有强大的脚本功能并可轻松与其他工具集成。

Maven 是一个更成熟的构建工具,已经存在了十多年。它基于 XML 配置文件,并以其强大的依赖管理系统而闻名。

虽然 Gradle 和 Maven 都有相同的基本目的,但它们在语法、功能和方法方面存在差异。在这次比较中,我们将仔细研究每个工具的优缺点。

Gradle 与 Maven:主要区别

Gradle

Maven

配置和语法

使用基于 Groovy 或 Kotlin 的 DSL,更加灵活和富有表现力。

使用基于 XML 的配置,该配置比较冗长且难以阅读。

构建速度和性能

使用增量构建系统,仅重建项目的必要部分,从而缩短构建时间。

使用完整的构建系统,对于大型项目来说可能会更慢。

在依赖性解决方面提供更大的灵活性,包括处理传递依赖性和冲突解决的能力。

提供更有限的依赖管理功能,在处理冲突和传递依赖方面灵活性较差。

插件和可扩展性

提供插件系统,可以轻松与其他工具和框架集成,并提供多种插件。

有一个插件系统,但选项比 Gradle 少,灵活性也差。

社区支持和采用

社区不断壮大,在行业中的采用率不断提高,特别是在 Android 开发人员中。

拥有一个大型且成熟的社区,并在 Java 社区中得到广泛采用。

Gradle 和 Maven 构建比较

使用 Gradle 构建一个简单的 Java 项目

为了演示使用 Gradle 构建简单 Java 项目的过程,那么只示例具有 main 方法的单个 Java 类的项目。首先,需要为项目创建一个目录,并在该目录中创建一个名为“src/main/java”的子目录。在该目录中,创建一个名为“HelloWorld.java”的文件,包含以下代码:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, world!");
    }
}

接下来,在项目的根目录中创建一个“build.gradle”的 Gradle 构建脚本。脚本的内容如下:

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'junit:junit:4.12'
}

jar {
    manifest {
        attributes 'Main-Class': 'HelloWorld'
    }
}

构建脚本定义 Java 插件,添加 Maven 中央存储库,指定用于测试的 JUnit 依赖项,并创建一个可运行的 jar 文件,并将主类设置为“HelloWorld”。有了这个构建脚本,我们可以通过运行命令来构建我们的项目./gradlew build。Gradle 将下载所需的依赖项、编译源代码、运行测试并创建 jar 文件。

使用 Maven 构建相同的项目

要使用 Maven 构建相同的项目,需要为该项目创建一个新目录,并在该目录中创建一个“src/main/java”的子目录。在该目录中,需要创建一个“HelloWorld.java”的文件,包含与 Gradle 示例中相同的代码。

接下来,在项目根目录中创建一个“pom.xml”文件,内容如下:

<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.example</groupId>
  <artifactId>hello-world</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.2.0</version>
        <configuration>
          <archive>
            <manifest>
              <mainClass>HelloWorld</mainClass>
            </manifest>
          </archive>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

构建文件和语法比较

在构建文件和语法方面,Gradle 和 Maven 之间存在一些显著差异。Gradle 使用基于 Groovy 的构建语言,语法更简洁且更具表现力。另一方面,Maven 使用基于 XML 的构建语言,语言更加冗长且难以阅读。

构建时间和性能对比

在构建速度和性能方面,Gradle 享有比 Maven 更快的声誉。但是,这两种构建工具的实际性能可能会有所不同,具体取决于项目的复杂性和所使用的具体配置。以下是 Gradle 官网相关测试数据(使用的 Gradle 和 Maven 版本较低,仅作参考):

83e0a9403747f131cd0333ae4767aab4957b03.png
d2585f123840ab9edd83485fb8f2ae337be9e1.png
92a80a7118dca4f07091316002c789afd25bac.png
562a640235965c5ed9f332c8dbd3a4d0baf2ae.png
1176b60839718330e961446f285b29e1d098d5.png

使用当下最流行的一句话:遥遥领先!!

要测量简单 Java 项目的构建时间,我们可以使用 Gradle 和 Maven 的内置计时功能。要使用 Gradle 测量构建时间,可以运行以下命令:

gradle clean build --profile

要使用 Maven 测量构建时间,可以使用以下命令:

mvn clean package -Dmaven.ext.class.path=/path/to/maven-exec-profiles.jar -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -Dorg.slf4j.simpleLogger.showDateTime=true

Gradle 和 Maven 的优缺点总结如下:

优点

缺点

Gradle

– 高度的灵活性和定制化

– 陡峭的学习曲线

– 支持多种语言和平台

– 对于某些任务,可能比 Maven 慢

– 增量构建加快执行速度

– 需要更大的内存占用

– 具有插件生态系统的可扩展架构

– 相对比 Maven 不成熟

Maven

– 成熟稳定,拥有庞大的用户和开发者社区

– 灵活性和定制性有限

– 强大的依赖管理和冲突解决

– 对 Java 以外的语言的支持有限

– 对于某些任务来说比 Gradle 轻量且更快

– 缺乏增量构建

– 对构建Java项目支持强大

– 对多模块项目的支持有限

那么总结12字建议:项目小,选 Maven,项目大,选 Gradle。

责任编辑:华轩 来源: 今日头条

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK