0

我目前正在尝试在任务中获取 Maven Deployer 的 URL,但它失败了。我能够获得 Maven Deployer 本身,但在调用方法时我显然无法创建 RemoteRepository 类型的对象mavenDeployer.getRepository()

这是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

org.apache.maven.artifact.ant.RemoteRepository显然,即使在我成功导入后,Gradle 也找不到该类。如果我注释掉创建类的行MavenDeployer,它工作正常。

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

4

1 回答 1

1

构建脚本类加载器不公开 RemoteRepository。但是由于 groovys 的鸭式输入,您应该能够解析信息:

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)
            }
        }
    }
}
于 2015-09-22T22:30:58.367 回答