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 は class を見つけることができません。class を作成する行をコメントアウトすると、正常に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 に答える