Настройка нескольких проектов Gradle с зависимостями -> Не удалось разрешить все зависимости

#java #eclipse #intellij-idea #gradle #gradlew

#java #eclipse #intellij-idea #gradle #gradlew

Вопрос:

У меня есть небольшая настройка нескольких проектов с gradle (также новая для нее), но она не компилируется. Я могу запустить его внутри IDE, но когда я хочу его скомпилировать, он терпит неудачу. Когда я затем пытаюсь использовать одну из зависимостей из проекта Engine в игровом проекте, она даже выходит из строя внутри IDE. Подробнее ниже.

 :Engine:compileJava UP-TO-DATE
:Engine:processResources UP-TO-DATE
:Engine:classes UP-TO-DATE
:Engine:jar
:compileJava

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all dependencies for configuration ':compileClasspath'.
> Could not find org.lwjgl:lwjgl:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl/3.0.1-SNAPSHOT/lwjgl-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl/3.0.1-SNAPSHOT/lwjgl-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-egl:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-egl/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-egl/3.0.1-SNAPSHOT/lwjgl-egl-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-egl/3.0.1-SNAPSHOT/lwjgl-egl-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-glfw:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-glfw/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-glfw/3.0.1-SNAPSHOT/lwjgl-glfw-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-glfw/3.0.1-SNAPSHOT/lwjgl-glfw-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-jemalloc:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-jemalloc/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-jemalloc/3.0.1-SNAPSHOT/lwjgl-jemalloc-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-jemalloc/3.0.1-SNAPSHOT/lwjgl-jemalloc-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-openal:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-openal/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-openal/3.0.1-SNAPSHOT/lwjgl-openal-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-openal/3.0.1-SNAPSHOT/lwjgl-openal-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-opencl:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opencl/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opencl/3.0.1-SNAPSHOT/lwjgl-opencl-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opencl/3.0.1-SNAPSHOT/lwjgl-opencl-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-opengl:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opengl/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opengl/3.0.1-SNAPSHOT/lwjgl-opengl-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opengl/3.0.1-SNAPSHOT/lwjgl-opengl-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-opengles:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opengles/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opengles/3.0.1-SNAPSHOT/lwjgl-opengles-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-opengles/3.0.1-SNAPSHOT/lwjgl-opengles-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-stb:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-stb/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-stb/3.0.1-SNAPSHOT/lwjgl-stb-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-stb/3.0.1-SNAPSHOT/lwjgl-stb-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine
> Could not find org.lwjgl:lwjgl-vulkan:3.0.1-SNAPSHOT.
  Searched in the following locations:
      https://jcenter.bintray.com/org/lwjgl/lwjgl-vulkan/3.0.1-SNAPSHOT/maven-metadata.xml
      https://jcenter.bintray.com/org/lwjgl/lwjgl-vulkan/3.0.1-SNAPSHOT/lwjgl-vulkan-3.0.1-SNAPSHOT.pom
      https://jcenter.bintray.com/org/lwjgl/lwjgl-vulkan/3.0.1-SNAPSHOT/lwjgl-vulkan-3.0.1-SNAPSHOT.jar
  Required by:
      project : > project :Engine

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 9.375 secs
 

Мой файл hirachy довольно прост:

Проект Движок

Проект Игра

Мой игровой проект должен использовать проект Engine, чтобы я мог легко что-то менять в проекте Engine без необходимости создавать для него новый файл .jar, а игровой проект просто работает с ним (например, если бы вы, например, добавили его в качестве проекта зависимостей в eclipse) и при компиляции игрыпроект он должен скомпилировать проект движка, чтобы получить требуемый jar для игрового проекта.

В настоящее время это работает так, что игровой проект имеет зависимости от проекта движка, и это довольно хорошо работает в моей IDE (ну, по крайней мере, когда проект движка импортируется), но как только я запускаю сборку, она завершается с ошибкой, как показано выше. Это также приводит к сбою в IDE, когда я хочу иметь доступ к классу, который является зависимостью в проекте движка, но не в игровом проекте, где полный проект движка является зависимостью.

Файл build.gradle игрового проекта.

 // Apply the java plugin to add support for Java
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'

// In this section you declare where to find the dependencies of your project
repositories {
    // Use 'jcenter' for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

// In this section you declare the dependencies for your production and test code
dependencies {
    // The production code uses the SLF4J logging API at compile time
    //compile 'org.slf4j:slf4j-api:1.7.21'

    // Declare the dependency for your favourite test framework you want to use in your tests.
    // TestNG is also supported by the Gradle Test task. Just change the
    // testCompile dependency to testCompile 'org.testng:testng:6.8.1' and add
    // 'test.useTestNG()' to your build script.
    //testCompile 'junit:junit:4.12'
    
    compile project(':Engine')
    runtime project(':Engine')
}
 

Файл settings.gradle игрового проекта:

 include 'Engine'
project (':Engine').projectDir = new File('../Engine') 

rootProject.name = 'Game'
 

Затем у меня есть файл build.gradle проекта Engine:

 apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'

sourceCompatibility = 1.8
targetCompatibility = 1.8

// In this section you declare where to find the dependencies of your project
repositories {
    // Use 'jcenter' for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}

task wrapper(type: Wrapper) {
    gradleVersion = '3.1'
}

sourceSets {
    main.java.srcDir "src/main/java"
}

project.ext.lwjglVersion = "3.0.1-SNAPSHOT"

import org.gradle.internal.os.OperatingSystem

switch ( OperatingSystem.current() ) {
    case OperatingSystem.WINDOWS:
      project.ext.lwjglNatives = "natives-windows"
      break
    case OperatingSystem.LINUX:
      project.ext.lwjglNatives = "natives-linux"
      break
    case OperatingSystem.MAC_OS:
      project.ext.lwjglNatives = "natives-macos"
      break
}

dependencies {
    // LWJGL dependencies START
    compile "org.lwjgl:lwjgl:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-egl:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-glfw:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-jemalloc:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-openal:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-opencl:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-opengl:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-opengles:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-stb:${lwjglVersion}"
    compile "org.lwjgl:lwjgl-vulkan:${lwjglVersion}"
    // LWJGL natives
    runtime "org.lwjgl:lwjgl:${lwjglVersion}:${lwjglNatives}"
    runtime "org.lwjgl:lwjgl-glfw:${lwjglVersion}:${lwjglNatives}"
    runtime "org.lwjgl:lwjgl-jemalloc:${lwjglVersion}:${lwjglNatives}"
    runtime "org.lwjgl:lwjgl-openal:${lwjglVersion}:${lwjglNatives}"
    runtime "org.lwjgl:lwjgl-stb:${lwjglVersion}:${lwjglNatives}"
    // LWJGL dependencies END
}
 

Итак, почему я получаю эту ошибку и как я могу решить ее таким образом, чтобы я мог запускать и создавать is project на Linux, Windows и Mac с помощью IDEs Eclipse и Intellij?
Ошибка возникает только при запуске

сборка gradlew

внутри игрового проекта. Сборка проекта engine работает просто отлично. Он также отлично работает, когда я запускаю игровой проект внутри, например, eclipse, но когда я хочу его создать или хочу использовать класс, к которому проект движка имеет доступ в игровом проекте, он завершается с ошибкой.

Ответ №1:

РЕДАКТИРОВАТЬ (лучший ответ)

Я бы организовал проекты по-другому.

Попробуйте использовать эту иерархию :

 Project/ 
  |
   - Game/
   - Engine/
   - build.gradle
   - settings.gradle
 

В ваших настройках.gradle

 include ':Game'
include ':Engine'
 

В вашем build.gradle корня проекта

 // In this section you declare where to find the dependencies of your project
repositories {
    // Use 'jcenter' for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
    maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
 

repositories узел ваших дочерних проектов больше не нужен.

settings.gradle вашего игрового проекта просто

 rootProject.name = 'Game'
 

Комментарии:

1. Да, в репозитории JCenter их нет. Вот почему я вставил ссылку на репозиторий, где их можно найти:

2. Со ссылкой на репозиторий он просто отлично работает. ссылка и там файлы есть, и они могут быть загружены с помощью проекта Engine. Похоже, что у игрового проекта есть проблемы с их загрузкой. (ссылка на репозиторий для их поиска находится в проекте Engine)

3. Новый ответ лучше?