Как получить доступ к вложенным зависимостям во время компиляции? - PullRequest
0 голосов
/ 26 марта 2020

Я разработал две библиотеки: cms-lib и common-lib.

cms-lib зависит от common-lib, как это

# gradle.build of cms-lib

dependencies {
  implementation 'com.example.shared:common-lib:1.0-SNAPSHOT'
}

common-lib содержит некоторые классы c публикации - например, com.example.shared.common.Content.java

Идея состоит в том, что cms-lib предназначено для использования сторонними клиентами (они должны объявить его в зависимостях gradle), тогда как common-lib должно быть скрыто от клиента (клиент не обязан объявлять свои зависимости gradle). Поэтому они просто объявляют только cms-lib - вот так:

# A
# build.gradle of a consumer of `cms-lib`

dependencies {
  implementation 'com.example.shared:cms-lib:1.0-SNAPSHOT'
}

Это означает, что common-lib является вложенной зависимостью cms-lib.

Я ожидаю, что классы publi c из вложенной зависимости common-lib, может быть получен клиентом cms-lib. Но оказывается, что они не доступны, так как я получаю ошибку компиляции:

> Task :compileJava FAILED
C:\temp\lib-test\src\main\java\consumer\Controller.java:3: error: package com.example.shared.common does not exist
import com.example.shared.common.Content;

Кажется, что в этом случае publi c классы support-lib не доступны во время компиляции (вероятно, только в Runtime).

Как получить доступ к вложенным зависимостям во время компиляции?

1 Ответ

1 голос
/ 26 марта 2020

Вам нужно будет применить java-library к проекту cms-lib. Затем вам нужно определить common-lib в конфигурации api, чтобы он был доступен на пути к классам потребителя cms-lib

. Подробнее о api против * 1009 можно прочитать подробнее. * в документах для плагина библиотеки Java .

# gradle.build of cms-lib

dependencies {
  api 'com.example.shared:common-lib:1.0-SNAPSHOT'
}


# A
# build.gradle of a consumer of `cms-lib`

dependencies {
  implementation 'com.example.shared:cms-lib:1.0-SNAPSHOT'
}
...