Библиотека Gradle Init Java не может разрешить зависимости для «цели» lib

У меня на машине установлена ​​Java 17 и Gradle 8.3.

Я создаю новый проект библиотеки Java, используя:

gradle init --type java-library

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

myapp/
  lib/
    src/main/java/<some-generated-java-code-here>
    build.gradle
  gradle.properties
  settings.gradle

Я запускаю gradle wrapper, затем захожу в build.gradle и добавляю несколько зависимостей, придавая этому вид:

plugins {
    id 'java-library'
}

group 'me.myself'
version '24.0.2'

repositories {
    mavenCentral()
}

dependencies {

    api 'org.apache.commons:commons-math3:3.6.1'

    implementation (
            'com.google.guava:guava:32.1.1-jre'

            ,'org.keycloak:keycloak-core'
            ,'org.keycloak:keycloak-server-spi'
            ,'org.keycloak:keycloak-server-spi-private'
            ,'org.keycloak:keycloak-services'
            ,'org.jboss.logging:jboss-logging'
            ,'org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec'
    )
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

jar {
    archiveBaseName = 'myapp-keycloak-customizer'
    archiveVersion = '24.0.2'
}

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

Внутри IntelliJ я собираюсь построить проект, просто чтобы добавить/разрешить новые зависимости, и получаю следующую ошибку:

:lib:main: Could not find org.keycloak:keycloak-core:.
Required by:
    project :lib

Я проверил, что org.keycloak:keycloak-core является допустимой записью для Maven Central. Кроме того, как вы увидите ниже, он даже не может найти журнал JBoss Logging, так что это не проблема зависимостей Maven или Keycloak. Я также могу убедиться, что у меня есть полный Wi-Fi и нет проблем с сетью.

Итак, из терминала я запускаю ./gradlew build --debug и получаю массу вывода, интересная часть которого такова:

[ERROR] [o.g.i.b.BuildExceptionReporter] FAILURE: Build failed with an exception.
[ERROR] [o.g.i.b.BuildExceptionReporter] 
[ERROR] [o.g.i.b.BuildExceptionReporter] * What went wrong:
[ERROR] [o.g.i.b.BuildExceptionReporter] Execution failed for task ':lib:compileJava'.
[ERROR] [o.g.i.b.BuildExceptionReporter] > Could not resolve all files for configuration ':lib:compileClasspath'.
[ERROR] [o.g.i.b.BuildExceptionReporter]    > Could not find org.keycloak:keycloak-core:.
[ERROR] [o.g.i.b.BuildExceptionReporter]      Required by:
[ERROR] [o.g.i.b.BuildExceptionReporter]          project :lib
[ERROR] [o.g.i.b.BuildExceptionReporter]    > Could not find org.keycloak:keycloak-server-spi:.
[ERROR] [o.g.i.b.BuildExceptionReporter]      Required by:
[ERROR] [o.g.i.b.BuildExceptionReporter]          project :lib
[ERROR] [o.g.i.b.BuildExceptionReporter]    > Could not find org.keycloak:keycloak-server-spi-private:.
[ERROR] [o.g.i.b.BuildExceptionReporter]      Required by:
[ERROR] [o.g.i.b.BuildExceptionReporter]          project :lib
[ERROR] [o.g.i.b.BuildExceptionReporter]    > Could not find org.keycloak:keycloak-services:.
[ERROR] [o.g.i.b.BuildExceptionReporter]      Required by:
[ERROR] [o.g.i.b.BuildExceptionReporter]          project :lib
[ERROR] [o.g.i.b.BuildExceptionReporter]    > Could not find org.jboss.logging:jboss-logging:.
[ERROR] [o.g.i.b.BuildExceptionReporter]      Required by:
[ERROR] [o.g.i.b.BuildExceptionReporter]          project :lib
[ERROR] [o.g.i.b.BuildExceptionReporter]    > Could not find org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.1_spec:.
[ERROR] [o.g.i.b.BuildExceptionReporter]      Required by:
[ERROR] [o.g.i.b.BuildExceptionReporter]          project :lib

Это почти как если бы мои зависимости искались в каталоге lib вместо того, чтобы извлекать их из Maven Central? Может ли кто-нибудь заметить, где я ошибаюсь, и помочь мне построить эту штуку, пожалуйста?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно вызывать implementation для каждой библиотеки и каждый раз указывать версию.

dependencies {
    def keycloakVersion = '24.0.3'
    implementation 'com.google.guava:guava:32.1.1-jre'
    implementation "org.keycloak:keycloak-core:$keycloakVersion"
    implementation "org.keycloak:keycloak-server-spi:$keycloakVersion"
    //...
}

Здесь мы используем некоторые возможности Groovy, а именно определение переменной и интерполяцию строк.

Уф, это было спасибо! То, как я определял зависимости внутри общего блока implementation, раньше было законным, было ли оно удалено из Gradle в какой-то момент (очень) недавно?

hotmeatballsoup 21.04.2024 23:34

Я никогда не видел таких обозначений. Возможно, для историков.

Simon Jacobs 22.04.2024 00:10

Нет, я использую его в другом проекте Gradle 8.3 и использую его уже более 8 лет, только не тот, который был указан как java-library.

hotmeatballsoup 22.04.2024 14:18

Что ж, документация API для версии 1.0 не сильно отличается от документации для версии 8.7 или версии 5.6.4, если уж на то пошло, поэтому я буду скептически относиться к вашему утверждению. Замечу, что если бы вы указывали имена файлов, то что-то подобное было бы возможно внутри вызова files().

Simon Jacobs 22.04.2024 17:15
java-library не имеет никакого значения, кроме присвоения конфигурации имени «реализация». Однако возможно, что другой плагин может добавить свою собственную вспомогательную функцию, позволяющую использовать такую ​​запись.
Simon Jacobs 22.04.2024 17:17

Если вы используете сервер JBoss, вы также можете попробовать ProvideCompile для зависимостей, которые уже существуют в пути к модулю JBoss по умолчанию, например, для средства ведения журнала.

Watermelon 23.04.2024 18:24

Другие вопросы по теме