我在处理Spring Integration的分支时遇到很多困难。有一个bug,涉及多个应用程序与Mongo同时使用此库。输入可能会导致同一文件处理两次而不是一次处理的问题。
我的计划是进行fork弹簧集成,创建一个客户端(例如称为x-client),该客户端可以使用fork在本地或在S3中使用Mongo来处理文件,从而充当spring-boot应用程序。功能。我会创建5-6个同时运行的x客户端实例来模拟错误。
因为x-client需要使用spring-integration的本地副本作为依赖项,所以我创建了一个顶层文件夹:spring-integration-lab,并将spring-integration分支放在一个子文件夹中,而clientx放在另一个子文件夹中:< / p>
springintegrationlab
|
|
-- /spring-integration (fork)
|
-- /inttest (aka clientx)
|
-- build.gradle
|
-- settings.gradle
问题是,在顶级目录中设置build.gradle很麻烦!其中很大一部分是我对gradle的无知,而spring-integration是一个多模块项目(MMP),而gradle不允许您创建引用另一个MMP的MMP。我的解决方案是创建一个顶级settings.gradle文件,以设置clientx和所有spring-integration项目。使两个项目的版本控制相匹配是很棘手的,但是现在我遇到了一个错误,即测试代码似乎被解释为常规代码,而testCompile
依赖项却没有被提取,产生了:
错误:软件包org.mockito不存在
或
错误:包org.springframework.test.context.junit4不存在
基本上,没有任何testCompile或testRuntime依赖项被用于编译src / test / java代码。
build.gradle文件的第60行应否定发生错误(由于src / test / java是常规位置,我也不认为这是必要的)。
可能是什么问题?我几乎是从spring-integration中直接复制了build.gradle文件,并试图对其进行最小的更改。
在我的 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')
如果需要,您可以在以下位置看到带有错误的提交:
请注意,您需要将spring-integration代码库克隆到此目录中,因为我不想将其包含在项目提交中。只需导航到/ spring-integration-lab并:
git clone https://github.com/spring-projects/spring-integration.git