Мне было очень трудно работать над форком 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