Тестовые библиотеки не используются в классах src / test / java проекта Gradle - PullRequest
0 голосов
/ 05 октября 2018

Мне было очень трудно работать над форком Spring Integration.Существует ошибка, в которой участвуют несколько приложений, одновременно использующих эту библиотеку с Mongo.Это может вызвать проблему, когда один и тот же файл обрабатывается дважды, а не один раз.

План, который у меня был, заключался в том, чтобы разветвить интеграцию с Spring, создать клиента (например, x-client), который мог бы функционировать какприложение весенней загрузки, использующее форк для обработки файлов локально или в S3 с Mongo, используемым для управления функциональностью.Я бы создал 5-6 экземпляров x-client, запущенных одновременно, чтобы имитировать ошибку.

Поскольку x-client должен использовать мою локальную копию Spring-интеграции в качестве зависимости, я создал папку верхнего уровня: spring-integration-lab и поместил разветвитель Spring-интеграции в подпапку, а clientx в другую подпапку:

springintegrationlab
|
|
  -- /spring-integration (fork)
|
 -- /inttest (aka clientx)
|
 -- build.gradle
|
 -- settings.gradle

Проблема в том, что установка build.gradle в каталоге верхнего уровня - это боль!Большая часть этого - мое невежество с gradle, и тот факт, что Spring-интеграция является многомодульным проектом (MMP), а gradle не позволяет вам создавать MMP, который ссылается на другой MMP.Мое решение состояло в том, чтобы создать файл settings.gradle верхнего уровня, который настраивает clientx и все проекты Spring-интеграции.Получить версии для обоих проектов было сложно, но теперь я получаю ошибку, из-за которой тестовый код интерпретируется как обычный код, а зависимости testCompile не выбираются, что приводит к:

ошибка: пакет org.mockito не существует

или

ошибка: пакет org.springframework.test.context.junit4 не существует

Практически любая зависимость testCompile или testRuntime не используется для компиляции кода src / test / java.

Строка 60 файла build.gradle должна отрицать, что ошибка не произошла (я также не думал бы, что это необходимо, так как src / test / java - это обычное расположение).

Чтопроблема может быть?Я в значительной степени скопировал файл build.gradle непосредственно из Spring-интеграции и попытался внести в него минимальные изменения.

Из моего build.gradle :

subprojects { subproject ->    
    apply plugin: 'java'
    ...

    sourceSets {
        test {
            resources {
                srcDirs = ['src/test/resources', 'src/test/java']
            }
        }
    }
    dependencies {
    testCompile "org.junit.jupiter:junit-jupiter-api:$junitJupiterVersion"
    testRuntime "org.junit.jupiter:junit-jupiter-engine:$junitJupiterVersion"
    testRuntime "org.junit.platform:junit-platform-launcher:$junitPlatformVersion"

    // To support JUnit 4 tests
    testRuntime "org.junit.vintage:junit-vintage-engine:$junitJupiterVersion"
    ...
    }
}

и settings.gradle

// forked project
rootProject.name = 'springlab'

include ':spring-integration', ':inttest'
new File('spring-integration').eachDir { dir ->
    if (dir.name.startsWith('spring-integration-')) {
        include "spring-integration:${dir.name}"
    }
}

project(':inttest').projectDir = new File('inttest')

При необходимости вы можетесмотрите коммит с ошибкой по адресу:

https://github.com/randeepbydesign/spring-integration-lab/commit/17d7670b237c89be2d104cda8430755258112b7f

Обратите внимание, что вам нужно клонировать базу кода Spring-Integration в этот каталог, так как я не хотел включать его в проектсовершить.Просто перейдите в / Spring-Integration Lab и:

git clone https://github.com/spring-projects/spring-integration.git

...