Плагин Gradle Spring Boot не работает в Linux

У меня есть многомодульная сборка 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 дня, поэтому любая помощь или предложения будут очень признательны. Спасибо!


person Zack    schedule 15.09.2017    source источник


Ответы (2)


Что ж, это очень смущает ... У меня был модульный тест с использованием FileUtils.getTempDirectory(), а затем я очищал этот каталог с помощью FileUtils.deleteQuietly после теста, и он удалял бинарное хранилище gradle, которое было в папке / tmp. Причина, по которой он не отображался в Windows, заключается в том, что Windows блокирует файлы.

person Zack    schedule 15.09.2017

Вы убедились, что ваш gradle.properties в порядке на компьютере с Linux?

person Mor Lajb    schedule 15.09.2017
comment
Что ж, это очень смущает... У меня был модульный тест с использованием FileUtils.getTempDirectory(), а затем я очищал этот каталог после теста, и он удалял хранилище бинарных файлов Gradle. Причина, по которой он не отображался в Windows, заключается в том, что Windows блокирует файлы. - person Zack; 15.09.2017