переходные зависимости gradle не импортируются - PullRequest
0 голосов
/ 07 апреля 2020

Это должно быть что-то довольно очевидное, но по какой-то причине я скучаю по нему после нескольких часов очень внимательного рассмотрения ..

Я строю многомодульный проект Spring Boot, следуя гексагональной архитектуре. с Gradle 5.1.1, поэтому у меня есть несколько таких адаптеров, как этот rest-adapter, для которых файл gradle.build находится ниже:

import org.springframework.boot.gradle.plugin.SpringBootPlugin

apply plugin: 'java-library'
apply plugin: 'io.spring.dependency-management'

dependencyManagement {
    imports {
        mavenBom SpringBootPlugin.BOM_COORDINATES
    }
}

dependencies {
    implementation project(':domain-api')

    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
} 

Я могу собрать его, без проблем.

В другой модуль, я хочу иметь зависимость от этого адаптера. Так, например, в моем модуле acceptance-test:

import org.springframework.boot.gradle.plugin.SpringBootPlugin

apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

dependencyManagement {
    imports {
        mavenBom SpringBootPlugin.BOM_COORDINATES
    }
}

dependencies {

    implementation project(':domain')
    implementation project(':domain-api')
    implementation project(':rest-adapter')
}

Так в acceptance-test, поскольку у меня есть зависимость от rest-adapter, я ожидал бы получить доступные зависимости "пружинной сети" - хорошо Я не могу, так как я не могу использовать org.springframework.http.HttpStatus:

Задача: приемочный тест: компиляция Java FAILED

C: \ Users \ vf \ IdeaProjects \ hexagonal-spring-boot-java \ accept-test \ src \ main \ java \ packageName \ MyClass. java: 3: ошибка: пакет org.springframework.http не существует import org.springframework.http. HttpStatus; ^

У меня было сомнение, что это было связано с тем, что я использовал стартер Spring Boot в качестве зависимости, поэтому я попробовал это в rest-adapter вместо:

dependencies {
    implementation project(':domain-api')

    implementation group: 'org.springframework', name: 'spring-web'
    compile "javax.servlet:javax.servlet-api:4.0.1"
    //implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'    
}

Но я получаю тот же результат.

Здесь я действительно ничего не понимаю ... Я не первый раз делаю многоузловой проект Gradle с Spring Boot, и даже когда я сравниваю с другими моими проектами Я не вижу никакой разницы.

Есть идеи, что может go здесь не так?

1 Ответ

2 голосов
/ 07 апреля 2020

Я новичок ie для Gradle. Так что, возможно, есть лучший способ сделать это, но я постараюсь ответить

Я думаю, что проблема заключается в том, что переходная зависимость подпроекта будет доступна для другого подпроекта, нам нужно сделать это api вместо implementation.

В адаптере покоя, чтобы его внутренняя зависимость была доступна при приемочных испытаниях, как в этом случае

implementation 'org.springframework.boot:spring-boot-starter-web'

измените его на api т.е.

api 'org.springframework.boot:spring-boot-starter-web'

https://docs.gradle.org/current/userguide/java_library_plugin.html#sec: java_library_separation

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