ошибка: модуль не найден: org.lwjgl.natives в многомодульной сборке Gradle

Я получаю следующие ошибки при попытке запустить многомодульную сборку gradle:

/Users/ashley/Personal/juggernaut/display/src/main/java/module-info.java:2: error: module not found: org.lwjgl.natives
  requires org.lwjgl.natives;
                    ^
/Users/ashley/Personal/juggernaut/display/src/main/java/module-info.java:3: error: module not found: org.lwjgl.glfw.natives
  requires org.lwjgl.glfw.natives;
                         ^
/Users/ashley/Personal/juggernaut/display/src/main/java/module-info.java:4: error: module not found: org.lwjgl.opengl.natives
  requires org.lwjgl.opengl.natives;
                           ^
/Users/ashley/Personal/juggernaut/display/src/main/java/module-info.java:5: error: module not found: org.lwjgl.stb.natives
  requires org.lwjgl.stb.natives;
                        ^
/Users/ashley/Personal/juggernaut/display/src/main/java/module-info.java:6: error: module not found: org.lwjgl.assimp.natives
  requires org.lwjgl.assimp.natives;

Структура моего проекта выглядит следующим образом:

├── build.gradle
├── display
│   ├── build.gradle
│   └── src
│       └── main
│           ├── java
│           │   ├── module-info.java
├── engine
│   ├── build.gradle
│   └── src
│       └── main
│           ├── java
│           │   ├── module-info.java
└── settings.gradle

для module-info.java для display требуются необходимые модули LWJGL3:

module uk.ashleybye.juggernaut.display {
  requires org.lwjgl.natives;
  requires org.lwjgl.glfw.natives;
  requires org.lwjgl.opengl.natives;
  requires org.lwjgl.stb.natives;
  requires org.lwjgl.assimp.natives;
  exports uk.ashleybye.juggernaut.display;
}

Соответствующие зависимости включены в build.gradle:

project.ext.lwjglVersion = "3.2.2"
project.ext.lwjglNatives = "natives-macos"

dependencies {
    implementation "org.lwjgl:lwjgl:$lwjglVersion"
    implementation "org.lwjgl:lwjgl-assimp:$lwjglVersion"
    implementation "org.lwjgl:lwjgl-glfw:$lwjglVersion"
    implementation "org.lwjgl:lwjgl-openal:$lwjglVersion"
    implementation "org.lwjgl:lwjgl-opengl:$lwjglVersion"
    implementation "org.lwjgl:lwjgl-stb:$lwjglVersion"
    runtimeOnly "org.lwjgl:lwjgl:$lwjglVersion:$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-assimp:$lwjglVersion:$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-glfw:$lwjglVersion:$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-openal:$lwjglVersion:$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-opengl:$lwjglVersion:$lwjglNatives"
    runtimeOnly "org.lwjgl:lwjgl-stb:$lwjglVersion:$lwjglNatives"
}

Engine requires uk.ashleybye.juggernaut.display; и имеет зависимость от реализации: implementation project(":display").

Информация о моей версии:

./gradlew --version                                          Sat 17 Aug 09:31:44 2019

------------------------------------------------------------
Gradle 5.5.1
------------------------------------------------------------

Build time:   2019-07-10 20:38:12 UTC
Revision:     3245f748c7061472da4dc184991919810f7935a5

Kotlin:       1.3.31
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM:          12 (Oracle Corporation 12+33)
OS:           Mac OS X 10.14.6 x86_64

Почему Gradle не может найти модули?


person amb85    schedule 17.08.2019    source источник


Ответы (1)


Ваш module-info.class вообще не должен включать аборигенов.

Удалите все .natives из каждого requires.

Кроме того, вы можете сжать свой build.gradle:

["", "-assimp", "-glfw", "-openal", "-opengl", "-stb"].each {
    String base = "org.lwjgl:lwjgl$it:$lwjgl_version"
    implementation base
    runtimeOnly = "$base:natives-$lwjgl_natives"
}

Вы можете обратиться к этот наш проект для справки, это многомодульный проект, который в значительной степени зависит от lwjgl и также использует JPMS.

person elect    schedule 19.08.2019