【问题标题】:Gradle Spring Boot plugin broken on LinuxGradle Spring Boot 插件在 Linux 上损坏
【发布时间】:2018-02-24 20:03:06
【问题描述】:

我有一个多模块 gradle 构建,其中包含一个包含使用其他模块工件的 spring boot 应用程序的单个模块。我已将 spring boot 插件应用于单个 spring boot 模块。

在 Windows 中一切正常,但是一旦我尝试在 Linux 机器上构建,如果失败。我尝试了多台 linux 机器(Jenkins 服务器、Ubuntu VM,甚至是 bitbucket 管道),但它失败并出现以下错误:

Problems reading data from Binary store in /tmp/gradle2075404181876889604.bin (exist: false)

我不完全确定 gradle 使用这个二进制存储的目的是什么,但在调试后我发现这个文件名与其他所有模块在构建时使用的二进制存储不同。

我尝试了多个 gradle 版本(2、3 和 4)和几个 spring boot 版本,但它们都失败并出现相同的错误。唯一能解决这个问题的是删除 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'
    }

这里是spring boot模块的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 天,因此我们将不胜感激任何帮助或建议。谢谢!

【问题讨论】:

    标签: java linux gradle spring-boot-gradle-plugin


    【解决方案1】:

    这太尴尬了...我使用 FileUtils.getTempDirectory() 进行了单元测试,然后在测试后使用 FileUtils.deleteQuietly 清理该目录,它正在删除 /tmp 中的 gradle 二进制存储文件夹。它没有在 windows 上显示的原因是 windows 锁定文件。

    【讨论】:

      【解决方案2】:

      您是否确认您的 gradle.properties 在 Linux 机器上正常?

      【讨论】:

      • 这太尴尬了...我使用 FileUtils.getTempDirectory() 进行了单元测试,然后我在测试后清理了该目录,它正在删除 gradle 二进制存储。它没有在 windows 上显示的原因是 windows 锁定文件。
      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2014-08-30
      • 2016-05-05
      • 2017-08-16
      相关资源
      最近更新 更多