2015-09-22 32 views
0

我目前正在嘗試獲取Maven部署者的URL在任務中,但它失敗。我能夠獲得Maven Deployer本身,但在調用方法mavenDeployer.getRepository()時,顯然不能創建RemoteRepository類型的對象。Gradle - 獲取MavenDeployer URL

這裏是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 
    } 
} 

它顯示:

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

FAILURE: Build failed with an exception. 

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

堆棧跟蹤的結束

顯然,Gradle無法找到類org.apache.maven.artifact.ant.RemoteRepository,即使我成功導入它之後。如果我註釋掉創建類MavenDeployer的行,它可以正常工作。

有沒有辦法解決這個問題?如果沒有,是否有另一種方式獲取Maven Deployer的存儲庫URL?

回答

1

構建腳本類加載器不公開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) 
      } 
     } 
    } 
}