在Gradle中使用多个仓库

2025/04/30

1. 简介

在本教程中,我们将了解如何在Gradle项目中使用多个仓库。当我们需要使用Maven Central上没有的JAR文件时,这非常有用,我们还将学习如何使用GitHub发布Java包并在不同项目之间共享它们。

2. 在Gradle中使用多个仓库

在使用Gradle作为构建工具时,我们经常在build.gradle的repositories部分遇到mavenCentral()。如果我们想要添加其他仓库,可以将它们添加到同一部分以指示库的来源:

repositories {
    mavenLocal()
    mavenCentral()
}

这里,mavenLocal()用于在Maven的本地缓存中查找所有依赖,任何在本地缓存中找不到的仓库都将从Maven Central下载。

3. 使用经过身份验证的仓库

我们还可以通过提供有效的身份验证来使用非公开的仓库,例如,GitHub和其他一些平台提供了将我们的包发布到其仓库的功能,之后可以在其他项目中使用

3.1 将包发布到GitHub包注册表

我们将把下面的类发布到GitHub注册表,然后在另一个项目中使用它:

public class User {
    private Integer id;
    private String name;
    private Date dob;
    
   // standard constructors, getters and setters
}

要发布代码,我们需要一个来自GitHub的个人访问令牌,我们可以按照GitHub文档中的说明创建一个,然后,我们使用用户名和此令牌向build.gradle文件添加一个发布任务:

publishing {
    publications {
        register("jar", MavenPublication) {
            from(components["java"])
            pom {
                url.set("https://github.com/eugenp/tutorials.git")
            }
        }
    }
    repositories {
        maven {
            name = "GitHubPackages"
            url = "https://maven.pkg.github.com/eugenp/tutorials"
            credentials {
                username = project.USERNAME
                password = project.GITHUB_TOKEN
            }
        }
    }
}

在上面的代码片段中,username和password是执行Gradle发布任务时提供的项目级变量

3.2 使用已发布的包作为库

成功发布我们的软件包后,我们可以从经过身份验证的仓库中将其作为库安装。让我们在build.gradle中添加以下代码,以便在新项目中使用已发布的软件包:

repositories {
    // other repositories
    maven {
        name = "GitHubPackages"
        url = "https://maven.pkg.github.com/eugenp/tutorials"
        credentials {
            username = project.USERNAME
            password = project.GITHUB_TOKEN
        }
    }
}
dependencies {
    implementation('cn.tuyucheng.taketoday.gradle:publish-package:1.0.0-SNAPSHOT')
    testImplementation("org.junit.jupiter:junit-jupiter-engine:5.9.0")
    // other dependencies
}

这将从GitHub包注册表安装库并允许我们在项目中扩展该类:

public class Student extends User {
    private String studentCode;
    private String lastInstitution;
    // standard constructors, getters and setters
}

让我们使用一个简单的测试方法来测试我们的代码:

@Test
public void testPublishedPackage(){
    Student student = new Student();
    student.setId(1);
    student.setStudentCode("CD-875");
    student.setName("John Doe");
    student.setLastInstitution("Institute of Technology");

    assertEquals("John Doe", student.getName());
}

4. 总结

在本文中,我们了解了如何在Gradle项目中使用来自多个仓库的库,我们还学习了如何使用GitHub Package Registry来管理经过身份验证的仓库。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章