У меня есть многомодульная сборка gradle с одним модулем, содержащим приложение весенней загрузки, которое использует артефакты других модулей. У меня есть плагин весенней загрузки, примененный к одному весеннему загрузочному модулю.
В Windows все работает корректно, но однажды я попробую собрать на Linux-машине, если не получится. Я пробовал несколько машин с Linux (сервер Jenkins, виртуальную машину Ubuntu, даже конвейер битбакета), и это не удается с этой ошибкой:
Problems reading data from Binary store in /tmp/gradle2075404181876889604.bin (exist: false)
Я не совсем уверен, для чего Gradle использует это двоичное хранилище, но после отладки я обнаружил, что это имя файла отличается от двоичного хранилища, которое использует любой другой модуль при сборке.
Я пробовал несколько версий Gradle (2, 3 и 4) и несколько версий Spring Boot, и все они терпят неудачу с одной и той же ошибкой. Единственное, что исправляет это, — это удаление плагина весенней загрузки.
Вот родительский build.gradle
repositories {
mavenCentral()
}
def javaLangVersion = '1.8'
def gradleDir = "${rootProject.rootDir}/gradle"
def realProjects = allprojects - [project(':external'), project(':delivery')]
def javaProjects = realProjects - rootProject
def integrationTestProjects = javaProjects
configure(realProjects) {
group 'com.packagename'
version '1.0-SNAPSHOT'
apply plugin: 'eclipse'
apply plugin: 'idea'
}
configure(javaProjects) {
apply plugin: 'java'
targetCompatibility = javaLangVersion
sourceCompatibility = javaLangVersion
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.slf4j', name: 'slf4j-api', version: "${slf4jVersion}"
compile group: 'org.slf4j', name: 'log4j-over-slf4j', version: "${slf4jVersion}"
testCompile group: 'junit', name: 'junit', version: "${junitVersion}"
testCompile group: 'org.mockito', name: 'mockito-core', version: "${mockitoVersion}"
testCompile group: 'nl.jqno.equalsverifier', name: 'equalsverifier', version: "${equalsverifierVersion}"
}
}
configure(integrationTestProjects) {
apply from: "${gradleDir}/integrationTest.gradle"
}
task wrapper(type: Wrapper) {
gradleVersion = '3.5'
}
Вот файл build.gradle модуля весенней загрузки:
buildscript {
ext {
springBootVersion = '1.5.3.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootStarterVersion}")
}
}
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
war {
baseName = "${project.name}"
version = "${project.version}"
}
dependencies {
compile project(':module1')
compile project(':module2')
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-rest'
compile group: 'org.apache.httpcomponents', name: 'httpcore', version: "${httpCoreVersion}"
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: "${httpClientVersion}"
compile group: 'com.h2database', name: 'h2', version: "${h2Version}"
testCompile project(':test-utils')
testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test'
}
Все остальные модули являются обычными java-модулями и объявляют только блок зависимостей в файле сборки.
Я работаю над этим уже 2 дня, поэтому любая помощь или предложения будут очень признательны. Спасибо!