Не удается получить ресурс при использовании общего модуля - PullRequest
0 голосов
/ 16 мая 2018

Я занимаюсь разработкой приложения с полным стеком, с тремя модулями: backend, frontend common.Их имена говорят сами за себя.Использование Kotlin 1.2.41

Проблема в том, что при наличии общего модуля, использующего getResource() в любом классе серверной части, он возвращает исключение, сообщающее, что файл не найден.Без общего модуля это работает.

Код, который я использую:

object Configuration {
    val content = javaClass.classLoader.getResource("app.properties").readText()
}

Это исключение:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.example.AppKt.main(App.kt:8)
Caused by: java.lang.IllegalStateException: javaClass.classLoader.ge…esource("app.properties") must not be null
    at com.example.Configuration.<clinit>(Configuration.kt:4)
    ... 1 more

Это дерево папок:

my-app
├── backend
|  ├── build.gradle
|  └── src
|     └── main
|        ├── kotlin
|        └── resources <-- app.properties here
├── common
|  ├── build.gradle
|  └── src
|     └── main
|        ├── kotlin
|        └── resources
├── frontend
|  ├── build.gradle
|  └── src
|     └── main
|        ├── kotlin
|        └── resources
└── build.gradle

Это build.gradle внутреннего модуля, в котором хранятся ресурсы.

apply plugin: 'kotlin'
apply plugin: 'kotlin-platform-jvm'
apply plugin: 'com.github.johnrengelman.shadow'

buildscript {
    ext {
        exposed_version = '0.10.2'
        h2_version = '1.4.197'
        hikari_version = '3.1.0'
        konfig_version = '1.6.7.0'
        ktor_version = '0.9.2'
        logback_version = '1.2.3'
        shadow_version = '2.0.4'
    }
    dependencies {
        classpath "com.github.jengelman.gradle.plugins:shadow:$shadow_version"
    }
}

repositories {
    maven { url 'https://dl.bintray.com/kotlin/ktor' }
    maven { url 'https://dl.bintray.com/kotlin/exposed' }
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

    implementation "io.ktor:ktor-auth:$ktor_version"
    implementation "io.ktor:ktor-gson:$ktor_version"
    implementation "io.ktor:ktor-html-builder:$ktor_version"
    implementation "io.ktor:ktor-server-netty:$ktor_version"

    implementation "com.h2database:h2:$h2_version"
    implementation "com.zaxxer:HikariCP:$hikari_version"
    implementation "org.jetbrains.exposed:exposed:$exposed_version"

    implementation "ch.qos.logback:logback-classic:$logback_version"
    implementation "com.natpryce:konfig:$konfig_version"

    expectedBy project(':common')
}

configurations {
    implementation {
        exclude group: 'org.jetbrains.kotlin', module: 'kotlin-runtime'
    }
}

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
compileKotlin {
    kotlinOptions.jvmTarget = '1.8'
}

compileTestKotlin {
    kotlinOptions.jvmTarget = '1.8'
}

kotlin {
    experimental {
        coroutines 'enable'
    }
}

и применяется kotlin-platform-jvm и kotlin-platform-js соответственно к каждому модулю.

Также попытался скопировать ресурсы в общий модуль, но не работает.Очистка проекта и аннулирование кэша IntelliJ.

Это происходит при отладке или запуске приложения в IntelliJ, при компиляции в толстую флягу.

У меня может возникнуть идея, почему выдает ошибку.Иногда в бэкэнд-модуле есть папка out, и ее содержимым являются скомпилированные классы и папка ресурсов.Когда папка присутствует, приложение может работать, а если нет, оно выдает исключение, приведенное выше.

Я не знаю, что я что-то упустил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...