1. 概述

在这个教程中,我们将学习如何将Maven构建转换为Gradle构建。为了实现这一目标,我们将使用现有的Maven项目中的gradle init命令。

2. Gradle设置

首先,在我们的机器上安装Gradle,通过下载Gradle发行版并遵循安装指南。我们还可以深入学习更多关于Gradle的内容:这里了解更多

3. Maven构建文件

让我们从一个标准的Maven Java项目开始,该项目的根目录下有一个名为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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.baeldung</groupId>
    <artifactId>maven-to-gradle</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.12.0</version>
        </dependency>
    </dependencies><br /><br />    <properties><br />        <maven.compiler.source>17</maven.compiler.source><br />        <maven.compiler.target>17</maven.compiler.target><br />    </properties>
</project>

4. 转换到Gradle

现在,让我们进入包含主pom.xml的Maven项目的根目录,并执行gradle init命令。当提示时,输入yes并按Enter键。我们应该会看到以下输出:

$ ./gradlew init
This will be executed during the initialization phase.

Found a Maven build. Generate a Gradle build from this? (default: yes) [yes, no] yes

Select build script DSL:
  1: Kotlin
  2: Groovy
Enter selection (default: Kotlin) [1..2] 2

Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] yes

> Task :init
Maven to Gradle conversion is an incubating feature.
For more information, please refer to https://docs.gradle.org/8.2-rc-2/userguide/migrating_from_maven.html in the Gradle documentation.

5. 生成的Gradle构建文件

现在,让我们检查项目根目录的内容。现在,我们在根目录中应该看到一些新文件。如果想深入了解,可以查看gradle-build-settings-properties

5.1. build.gradle

build.gradle文件是Gradle构建过程的核心组件,它是Maven构建中pom.xml文件的直接对应物。在这里,像groupIdversiondependencies这样的pom.xml属性被转换为其Gradle等价物。此外,还有sourceCompatibility属性,它告诉我们在编译Java源代码时应使用哪个Java版本。在插件部分,我们有java-library插件,它支持构建任何类型的Java项目,以及maven-publish插件,支持将 artefacts发布到Maven兼容的仓库

/*
 * This file was generated by the Gradle 'init' task.<br /> * This project uses @Incubating APIs which are subject to change.
 */

plugins {
    id 'java-library'
    id 'maven-publish'
}

repositories {
    mavenLocal()
    maven {
        url = uri('https://repo.maven.apache.org/maven2/')
    }
}

dependencies {
    api 'org.apache.commons:commons-lang3:3.12.0'
}

group = 'com.baeldung'
version = '0.0.1-SNAPSHOT'
description = 'maven-to-gradle'
java.sourceCompatibility = JavaVersion.VERSION_1_8

publishing {
    publications {
        maven(MavenPublication) {
            from(components.java)
        }
    }
}

5.2. settings.gradle

settings.gradle文件在Gradle初始化阶段被使用,以识别构建中包含哪些项目。

/*
 * This file was generated by the Gradle 'init' task.<br /> * This project uses @Incubating APIs which are subject to change.
 */

rootProject.name = 'maven-to-gradle'

5.3. gradlewgradlew.bat

Gradle还会生成两个启动脚本,一个用于Windows,另一个用于Unix。这些脚本可以在没有事先安装Gradle的机器上运行项目。关于Gradle包装器文件的更多信息,可以参考gradle-wrapper

6. 总结

在这篇文章中,我们了解了如何将包含pom.xml的Maven构建转换为拥有多个构建文件(如build.gradlesettings.gradlegradlewgradlew.bat)的Gradle构建。本文档的示例代码可以在GitHub上找到。