2015-03-12 7 views
1

У меня есть два проекта, определенные в Gradle, projectA и projectB, определенные как мультипроект.Исключить транзитивную JAR-зависимость в Gradle

ProjectA имеет зависимость от spring1-beans.jar Между тем ProjectB имеет зависимость от ProjectA.

Проблема, которую я получил, заключается в том, что ProjectB также имеет зависимость от spring3-beans, поэтому мне нужно исключить банку Spring1, иначе она будет использовать неправильную версию Spring.

Gradle конф файл для Projecta выглядит следующим образом:

dependencies { 
    compile files('lib/spring-beans.jar') 
} 

и конф для ProjectB:

dependencies { 

    compile project(':projects:projectA') { 
     exclude files('lib/spring-beans.jar') 
    } 
} 

К сожалению, это делает не работу. Gradle выдает следующее сообщение об ошибке:

Could not find method exclude() for arguments [file collection] on project

Я также попытался с модулем с аналогичным выходом:

The description 'lib/spring-beans.jar' is invalid

Примечание:

  • Я использую баночки зависимости, так как проект переносится из Ant, поэтому я не могу переключиться на удаленный репозиторий, хотя я открыт для предложений.
+0

Я не знаю, как исключить эту транзитивную зависимость, но теперь вы настроили на * исключить * замыкание на * проект * экземпляр. Это должно быть 'compile (project (': projects: projectA')) {exclude files ('lib/spring-beans.jar')}', чтобы настроить его для 'configuration' (обратите внимание на parens). Почему бы вам не переключиться на удаленный репозиторий? Почему это невозможно? – Opal

+0

@ Opal Я попробовал скобки, но не повезло. Я не могу использовать дистанционное репо на данный момент, потому что это потребует изменений в системе сборки, и мы хотели бы сделать переход по этапам. Итак, первая фаза с не удаленными репозиториями ... –

+0

Я имел в виду, что упомянутый синтаксис исправляет эту ошибку: * Не удалось найти метод exclude() для аргументов [сбор файлов] в проекте *, не исключая зависимости. – Opal

ответ

0

Недавно я увидел аналогичную проблему с моей сборкой Android Gradle. Вот вопрос:

java.io.IOException: Invalid argument 
Could not normalize path for file 'C:\Users\xxxxxx\AndroidStudioProjects\FightClub\app\libs\*.jar'. 

Вот надрез из файла Gradle:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) <---- USE THIS 
    compile project(':LibQSM') 
    compile 'com.android.support:appcompat-v7:22.0.0' 
    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.stripe:stripe-android:+' 
    compile 'net.hockeyapp.android:HockeySDK:3.5.0' 
    compile 'com.joanzapata.pdfview:android-pdfview:[email protected]' 
    compile 'com.google.android.gms:play-services-gcm:7.0.0' 
    compile files('libs/*.jar') <---- NOT THIS, PROBLEM HERE!!!!! 
} 

Вопрос оказался способ, которым я был указать путь для зависимостей. Указанная проблемная строка содержала разделитель '/', который разбился на Windows, но отлично работал на OSX & Linux.

Убедитесь, что вы используете первый найденный метод ... 'compile fileTree (dir:' xxx ', include: [' * .jar '])' на второй.

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