2014-10-20 7 views
0

У меня есть удаленные репозитории maven в файле build.gradle моего модуля приложения. Когда я бег assembleDebug -info из командной строки, я могу видеть, что Gradle пытается решить зависимости библиотеки поддержки, посмотрев их в моей удаленном Maven репо, и я получаю эту ошибку:Порядок разрешения зависимостей Android Gradle

Resource missing. [HTTP GET: https://raw.githubusercontent.com/me/releases-android/master/releases/com/android/support/appcompat-v7/maven-metadata.xml] 
Failed to get resource: GET. [HTTP HTTP/1.1 400 Bad Request: https://raw.githubusercontent.com/me/releases-android/master/releases/com/android/support/appcompat-v7/] 
Resource missing. [HTTP GET: https://raw.githubusercontent.com/me/releases-android/master/releases/com/android/support/cardview-v7/maven-metadata.xml] 
Failed to get resource: GET. [HTTP HTTP/1.1 400 Bad Request: https://raw.githubusercontent.com/me/releases-android/master/releases/com/android/support/cardview-v7/] 
Resource missing. [HTTP GET: https://raw.githubusercontent.com/me/releases-android/master/releases/com/android/support/palette-v7/maven-metadata.xml] 
Failed to get resource: GET. [HTTP HTTP/1.1 400 Bad Request: https://raw.githubusercontent.com/me/releases-android/master/releases/com/android/support/palette-v7/] 
Resource missing. [HTTP GET: https://raw.githubusercontent.com/me/releases-android/master/releases/com/android/support/recyclerview-v7/maven-metadata.xml] 
Failed to get resource: GET. [HTTP HTTP/1.1 400 Bad Request: https://raw.githubusercontent.com/me/releases-android/master/releases/com/android/support/recyclerview-v7/] 
Resource missing. [HTTP GET: https://raw.githubusercontent.com/me/releases-android/master/releases/com/google/android/gms/play-services/maven-metadata.xml] 
Failed to get resource: GET. [HTTP HTTP/1.1 400 Bad Request: https://raw.githubusercontent.com/me/releases-android/master/releases/com/google/android/gms/play-services/] 

Вопрос: Есть ли способ настроить файл градиента, чтобы прекратить попытки подключиться к моему удаленному репозиторию maven для разрешения конкретных зависимостей от Android? Вот мой файл build.gradle:

apply plugin: 'com.android.application' 

    android { 
     ... 

     dependencies { 
      compile fileTree(dir: 'libs', include: ['*.jar']) 
      compile 'com.android.support:appcompat-v7:21.0.+' 
      compile 'com.android.support:cardview-v7:21.0.+' 
      compile 'com.android.support:palette-v7:21.0.+' 
      compile 'com.android.support:recyclerview-v7:21.0.+' 
      compile 'com.google.android.gms:play-services:6.1.+' 
      compile 'com.android.support:support-v4:21.0.0' 
      compile 'com.android.support:support-v13:21.0.0' 
     } 
    } 

    repositories { 
     //My personal repo 
     maven { url 'https://raw.githubusercontent.com/me/releases-android/master/releases/'} 
    } 

    dependencies { 
     //My App's Dependencies here  
    } 

ответ

1

Не используйте + в своих номерах версий. Если вы используете +, система сборки должна периодически проверять, доступна ли более новая версия. Если вы укажете явный номер версии без +, и если эта версия будет кеширована, ей никогда не придется ударять по сети.

Он искал ваш пользовательский репозиторий, потому что для оценки спецификации версии + необходимо будет сканировать все репозитории, чтобы найти ту, которая имеет самую последнюю версию. Если вы укажете номер версии явно, он будет сканировать репозитории в том порядке, в каком они появляются в файлах сборки, и прекратить, когда он получит то, что он хочет.

+0

, что определенно поможет, и я это сделаю. Вы случайно не знаете, есть ли способ заказать репозитории, чтобы система сборки точно знала, где разрешать каждую зависимость? – WindsurferOak

+0

Он оценивает их в том порядке, в котором они находятся в файле сборки, и останавливается, когда находит то, что ищет. Поскольку кажется, что вы помещаете свой репозиторий последним в цепочку, он не должен смотреть туда, если он не может найти эту версию где-либо еще. В случае символа '+', по очевидным причинам, нужно искать повсюду, чтобы найти последнее. –

0

Это потому, что в вашем приватном репозитории нет поддерживающих андроид. Я бы добавил mavenCentral() в репозитории, чтобы Gradle попытался сначала разрешить зависимости через центральное репо maven, а затем пройти через ваше частное репо, если зависимость не найдена в центральном репо.

repositories { 
    mavenCentral() 
    //My personal repo 
    maven { url 'https://raw.githubusercontent.com/me/releases-android/master/releases/'} 
} 
+0

Я использую jcenter() вместо mavenCentral() в моем файле build.gradle верхнего уровня. – WindsurferOak

Смежные вопросы