Gradle - 获取 MavenDeployer URL

Gradle - Get the MavenDeployer URL

我目前正在尝试在任务中获取 Maven Deployer 的 URL,但它失败了。我能够获得 Maven Deployer 本身,但在调用方法 mavenDeployer.getRepository().

时显然无法创建 RemoteRepository 类型的对象

这是 build.gradle 文件:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file:///path/to/maven/repo/")
        }
    }
}

在我的任务中:

Upload uploadArchives = project.getTasks().withType(Upload.class)
                          .findByName(BasePlugin.UPLOAD_ARCHIVES_TASK_NAME);

for(ArtifactRepository repo : uploadArchives.getRepositories()) {
    if (repo instanceof MavenDeployer) {
        MavenDeployer mavenDeployer = (MavenDeployer) repo;
        System.out.println(repo) //Returns org.apache.maven.artifact.ant.RemoteRepository

        RemoteRepository l = (RemoteRepository) mavenDeployer.getRepository() // Crashes here
    }
}

显示:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':myTask'.
> org/apache/maven/artifact/ant/RemoteRepository

堆栈跟踪结束于:

Caused by: java.lang.ClassNotFoundException: org.apache.maven.artifact.ant.RemoteRepository

显然,Gradle 无法找到 class org.apache.maven.artifact.ant.RemoteRepository,即使我已成功导入它。如果我注释掉创建 class MavenDeployer 的行,它工作正常。

有办法解决这个问题吗?如果没有,是否有另一种方法来获取 Maven Deployer 的存储库 URL?

构建脚本类加载器不公开 RemoteRepository。但你应该能够解决这些信息,感谢 groovys ducktyping:

task printDeployerUrl << {
    tasks.withType(Upload) { uploadTask ->
        for(ArtifactRepository repo : uploadArchives.getRepositories()) {
            if (repo instanceof MavenDeployer) {
                MavenDeployer mavenDeployer = (MavenDeployer) repo;
                System.out.println(repo.repository.url)
            }
        }
    }
}