1. 引言

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

2. 在Gradle中使用多个仓库

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

repositories {
    mavenLocal()
    mavenCentral()
}

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

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任务,使用用户名和此令牌:

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
            }
        }
    }
}

在上述片段中,usernamepassword是执行Gradle的publishing任务时提供的项目级变量。

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('com.baeldung.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包注册表处理受保护的仓库。

如往常一样,示例代码的源代码可在GitHub上查看