Как maven выглядит для транзитивной зависимости - PullRequest
0 голосов
/ 21 апреля 2019

У меня есть проект gradle A, который я хочу экспортировать как библиотеку, теперь я использовал плагин maven publish для генерации pom.xml из его build.gradle.И успешно загружен в местную артефакту.

Теперь я могу импортировать его в другой проект, но зависимости не рассматриваются.

Например: Моя библиотека A имеет зависимости B и C.Когда я использую A в проекте, он не загружает B и C.

Я предполагаю, что сделал что-то не так при генерации A (неверно pom.xml / или любая другая ошибка).

Но я хочу знать, как у Мейвена фигурируют переходные зависимости.Например, какие файлы / местоположения он сканирует, где ищет зависимости?

Код

Задача для генерации pom.xml в проекте A.

task writeNewPom << {
    pom {
        project {
            groupId 'com.a.b'
            version '1.0.0'
        }
    }.writeTo("src/main/resources/META-INF/maven/com.a.b/feature-store-lib/pom.xml")
}

Местоположение моего pom.xml находится в META-INF/maven/com.a.b/feature-store-lib/

Я успешно могу загрузить в артефакт.

Я также могу правильно импортировать в другой проект Gradle, но его переходные зависимости отсутствуют.

Вот обрезанный вывод gradle dependencies

|    |    \--- org.junit.platform:junit-platform-commons:1.3.1 (*)
|    \--- junit:junit:4.12
|         \--- org.hamcrest:hamcrest-core:1.3
+--- com.a.b:feature-store-lib:0.4
+--- io.github.microutils:kotlin-logging:1.6.22
|    +--- io.github.microutils:kotlin-logging-common:1.6.22

Как вы можете видеть, не существует транзитивных зависимостей от com.a.b:feature-store-lib:0.4

Нужны идеи для отладки.

1 Ответ

0 голосов
/ 21 апреля 2019

Прежде всего, я собираюсь предположить, что вы производите пом из-за некоторых внешних требований.В противном случае я бы предложил использовать плагин публикации, как описано в документации .Таким образом, публикация в артефакте становится очень простой.

Мой первый инстинкт - то, что вы могли использовать неправильную конфигурацию в объявлении зависимости.Если вы используете более новую версию gradle, вам следует использовать конфигурацию api для зависимостей, которые должны быть представлены любому пользователю вашего артефакта.

dependencies {
    api 'org.apache.httpcomponents:httpclient:4.5.7' // Exposed
    implementation 'org.apache.commons:commons-lang3:3.5' // Not exposed
}

Для получения дополнительной информации я обращаюськ документации по этому предмету: https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_configurations_graph

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