Как загрузить файл конфигурации из build.gradle для приложения Kotlin? - PullRequest
2 голосов
/ 27 июня 2019

Я пытаюсь создать простое приложение kotlin + dropwizard.

Я следил за информацией в Интернете, включая эту https://dev.to/tagmg/step-by-step-guide-to-building-web-api-with-kotlin-and-dropwizard

Так что после некоторых модификаций я создал приложение со сборкой.gradle.kts как это:

plugins {
    application
    kotlin("jvm")
    id("com.github.johnrengelman.shadow") version "4.0.3"
}

application {
    mainClassName = "path.MyApplication"
}


dependencies {
    implementation("... dependencies ...")
}

val shadowJar: ShadowJar by tasks

shadowJar.apply {
    mergeServiceFiles()
    manifest.attributes.apply {
        put("Main-Class", application.mainClassName)
    }
}

tasks.named<JavaExec>("run") {
    args("server", "local.yml")
}

В MyApplication у меня есть что-то вроде этого:

класс MyApplication: Application () {

companion object {
    @JvmStatic fun main(args: Array<String>) {
        MyApplication().run(*args)
    }
}

override fun run(configuration: MyConfiguration, environment: Environment) {

    val myResource = MyResource() //endpoints with dropwizard
    environment.jersey().register(myResource)
    }

} 

И в MyConfiguration

class MyConfiguration(val serviceName: String
) : Configuration(){



}

Проблема ...

Когда я запускаю gradlew, я получаю эту ошибку:

  * Failed to parse configuration; Cannot construct instance of `MyConfiguration` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: UNKNOWN; line: -1, column: -1]

Я серьезно не знаю, почему эта ошибка или если что-то происходитмой local.yml

мой файл local.yml имеет следующее:

serviceName: Kotlin Calculator

Ирония заключается в том, что когда я изменяю: for =, мое приложение запускается.

Есть идеи, что с этим не так?

1 Ответ

1 голос
/ 10 июля 2019

Класс MyConfiguration должен иметь пустой конструктор. Сделайте serviceName свойством.

class MyConfiguration() : Configuration(){

  @NotNull
  val serviceName: String = ""
}
...