【问题标题】:Creating docker image with Kotlin multimodule spring project使用 Kotlin 多模块 spring 项目创建 docker 映像
【发布时间】:2020-12-14 11:47:19
【问题描述】:

你好@stackoverflow 社区,

我有一个具有以下结构的 Kotlin Spring Boot 应用程序

.
├── build.gradle.kts
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── pipeline.yml
├── services
│   └── environment
│       ├── build.gradle.kts
│       └── src
│           └── main
│               └── kotlin
│                   └── com
│                       └── demo
│                           └── app
│                               └── services
│                                   └── environment
│                                       ├── controller
│                                       │   └── EnvironmentController.kt
│                                       ├── model
│                                       │   └── Environment.kt
│                                       └── repository
│                                           └── EnvironmentRepository.kt
├── settings.gradle.kts
└── web
    ├── build.gradle.kts
    └── src
        └── main
            ├── kotlin
            │   └── com
            │       └── demo
            │           └── app
            │               └── DemoApplication.kt
            └── resources
                └── application.properties

build.gradle.kts

plugins {
    id("org.springframework.boot") version "2.3.3.RELEASE" apply false
    id("io.spring.dependency-management") version "1.0.10.RELEASE" apply false
    kotlin("jvm") version "1.4.0" apply false
    kotlin("plugin.spring") version "1.4.0" apply false
}

allprojects {
    group = "com.demo"
    version = "1.0.0-SNAPSHOT"

    tasks.withType<JavaCompile> {
        sourceCompatibility = "1.8"
        targetCompatibility = "1.8"
    }

    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions {
            freeCompilerArgs = listOf("-Xjsr305=strict")
            jvmTarget = "14"
        }
    }
}

subprojects {
    repositories {
        mavenCentral()
    }

    apply {
        plugin("io.spring.dependency-management")
    }
}

服务/环境/build.gradle.kts

plugins {
    id("org.springframework.boot")

    kotlin("jvm")
    kotlin("plugin.spring")
    application
}

dependencies {
    implementation(kotlin("reflect"))
    implementation(kotlin("stdlib-jdk8"))
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.postgresql:postgresql")
}

application {
    mainClassName = "com.demo.app.services.environment"
}

web/build.gradle.kts

plugins {
    id("org.springframework.boot")
    id("com.google.cloud.tools.jib") version "2.5.0"

    kotlin("jvm")
    kotlin("plugin.spring")
    application
}

dependencies {
    implementation(project(":services:environment"))

    implementation(kotlin("reflect"))
    implementation(kotlin("stdlib-jdk8"))
    implementation("org.springframework.boot:spring-boot-starter")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-actuator")
}

application {
    mainClassName = "com.demo.app"
}


jib {
    from {
        image = "openjdk:14-jdk-slim"
    }
    to {
        image = "demo/app"
    }
}

不知何故,当我使用 jibDockerBuild 构建我的 docker 映像时,docker 容器内正在运行的应用程序中缺少子模块“services.environment”,我无法访问我在此子模块中编写的 REST API。

...我真的被这个问题困住了,无法继续前进,我希望得到帮助。

谢谢, 安德里奥舍

【问题讨论】:

  • :service:environment 是一个纯编译时 Java 库还是一个独立服务,在其自己的端口上运行和侦听 :web?如果是一个库,当您尝试使用来自:service:environment 的类时,您是在说:web 抛出ClassNotFoundException 吗?您是否检查过 Docker 映像中的 /app/libs/ 是否包含 :service:environment 的 JAR 文件?

标签: kotlin gradle gradle-kotlin-dsl jib


【解决方案1】:

我必须在 :services:environment 中的 build.grade.kts 中添加以下几行

tasks {
    jar {
        enabled = true
    }
}

并将 :web 中的主类设置为“de.demo.app.DemoApplicationKt

【讨论】:

  • 如果是这种情况,则问题与 Jib 无关。如果您不启用jar 任务,即使./gradlew clean assemble(即从干净状态构建)也会在:web 引用来自:services:environment 的类时失败。
  • 是的,./gradlew build 也有问题。我很高兴我能修复它,你间接地给了我寻找 jar 文件的提示,否则我仍然会搜索错误
猜你喜欢
  • 2020-11-15
  • 2017-09-20
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2020-04-01
  • 2021-11-04
相关资源
最近更新 更多