Gradle 6.4, Kotlin и JPMS - PullRequest
       85

Gradle 6.4, Kotlin и JPMS

0 голосов
/ 06 мая 2020

Итак, 6.4 (наконец) вышла и имеет поддержку JPMS

Стремясь попробовать, я начал модифицировать один наш проект, чтобы поиграть с ним.

jjohannes имеет (kotlin) пример на одном из его репо

Я пытался скопировать / вставить то, что имело значение, в наш проект здесь

Но, к сожалению, мне это не удалось.

Когда бы я ни пытался запустить, я всегда получаю:

C: \ Users \ elect \ IdeaProjects \ kotlin -unsigned \ src \ main \ java \ module-info. java: 4: ошибка: модуль не найден: kotlin .stdlib.jdk8 требует kotlin .stdlib.jdk8;

Ссылаясь на module-info.java:

module com.github.kotlin_graphics.kotlin_unsigned {

//    requires kotlin.stdlib;
    requires kotlin.stdlib.jdk8; // error

    exports unsigned;
}

stdlib или stdlib-jdk8 мало что меняет

Что я делаю не так?

1 Ответ

1 голос
/ 13 мая 2020

Я проверил ваше репо.

Вам понадобятся эти исправления.

  • Добавлен java плагин.
plugins {
    kotlin("jvm") version "1.3.72"
    java
}

java {
    modularity.inferModulePath.set(true)
}
  • Используйте kotlin("stdlib") во всех 3 местах (2 в build.gradle.kts и 1 в информации о модуле. java).
dependencies {
    implementation(kotlin("stdlib"))
    ...
    components { withModule<ModularKotlinRule>(kotlin("stdlib")) }
}
module com.github.kotlin_graphics.kotlin_unsigned {

    requires kotlin.stdlib;
//    requires kotlin.stdlib.jdk8;

    exports unsigned;
}

Для kotlin("stdlib-jdk8") вам нужно чтобы добавить его вместе с kotlin("stdlib")

dependencies {
    implementation(kotlin("stdlib"))
    implementation(kotlin("stdlib-jdk8"))
    ...
    components { withModule<ModularKotlinRule>(kotlin("stdlib")) }
    components { withModule<ModularKotlinRule>(kotlin("stdlib-jdk8")) }
}

Тогда ваш module-info.java может быть

module com.github.kotlin_graphics.kotlin_unsigned {

//    requires kotlin.stdlib;
    requires kotlin.stdlib.jdk8;

    exports unsigned;
}

./gradlew build успешно собран для меня.
Я также добавляю, чтобы добавить недостающие тестовая зависимость:

testImplementation("io.kotlintest:kotlintest-runner-junit5:$kotlintest_version")

ОБНОВЛЕНИЕ: указано как для stdlib, так и stdlb-jdk8

...