2016-06-09 2 views
0

Здесь он настроен так же, как и везде. Фактически я использую импорт для настройки тестов интеграции. Я сделал все, о чем я могу думать, включая переименование задач и конфигураций локального интеграционного тестирования, включая просмотр дерева зависимостей, в том числе запуск с --debug. Тем не менее, по какой-то причине Gradle настаивает, что свойство integrationTest не существует на sourceSet для зависимости между проектами:Мне нужны советы по отладке для сломанной зависимости проекта

integrationTestCompile project(':components:things-components:abc-stuff').sourceSets.integrationTest.output 

... теперь я не особенно люблю этот синтаксис и я уже ворчал буря о зависимостях между проектами и о том, как они должны быть в компоненте тестовой утилиты. Тем не менее, я делаю это так, потому что это похоже на то, что IntelliJ примет. Такое письмо вызывает проблемы:

integrationTestCompile project(path: ':components:things-components:abc-stuff', configuration: 'integrationTest') 

Как это понять? Я просто не понимаю, почему только один проект имеет эту проблему.

Для записи, я также пытался:

integrationTestCompile project(path: ':components:things-components:abc-stuff', configuration: 'integrationTestCompile') 
+0

В ': components: things-components: abc-stuff' вы опубликовали банку на' integrationTest'? – Ethan

+0

№ Нет причин, по которым интеграционные тесты не развертываются. Зачем тратить лишние циклы? Как уже упоминалось, он настроен одинаково повсюду. Нигде в нашей сборке нет тестов JAR'ed. Я подозреваю, что я нашел ошибку в Gradle. Меня особенно беспокоит то, что мы могли бы пересечь какую-то верхнюю границу, так как наша сборка огромна. 100+ подпроектов с огромным количеством зависимостей. – user447607

+0

... сверху второй мысль .... пожалуйста уточните? Я сейчас пробую этот угол. – user447607

ответ

0

Вопрос заключается в том, что Gradle не было сказано, чтобы сделать банку для вас, что вы можете потреблять в вашем другом проекте.

integrationTestCompile project(':components:things-components:abc-stuff').sourceSets.integrationTest.output 

Получает классFiles и зависимости, поэтому его работа с использованием этих обозначений. Если вы хотите использовать нотацию configuration, вам нужно будет указать gradle, чтобы опубликовать банку на integrationTest. Банку не нужно публиковать в репозитории, но она будет использоваться для внутренних сборников.

Вы можете сделать это, выполнив:

configurations { 
    integrationTest 
} 

task integrationTestJar (type: Jar) { 
    baseName = "${project.name}-integ-test" 
    from sourceSets.integrationTest.output 
} 

artifacts { 
    integrationTest integrationTestJar 
} 

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

+0

Тогда почему он работает везде, где не указаны баночки? Кажется, я уже пробовал это, но дважды проверю. Как уже упоминалось ранее, у нас есть этот блок следующим образом: apply from: "$ {rootProject.rootDir} /buildSrc/config/integrationTest.gradle" – user447607

+0

Когда вы выполняете 'sourceSets.integrationTest.output', вы должны быть в зависимости от FileCollection, который содержат скомпилированные файлы классов. Когда вы добавляете артефакт в 'integrationTest', тогда, когда вы зависите только от конфигурации« integrationTest », у него будут банка и ваши зависимости. – Ethan

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