Java 如何在编译时访问嵌套依赖项?

Java 如何在编译时访问嵌套依赖项?,java,gradle,compilation,dependencies,Java,Gradle,Compilation,Dependencies,我开发了两个库: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包含一些公共类-f.e.com.example.shared.common.Content.java 其想法是,cms-lib供第三方客户使用(他们应该在其grad

我开发了两个库:
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
包含一些公共类-f.e.
com.example.shared.common.Content.java

其想法是,
cms-lib
供第三方客户使用(他们应该在其gradle依赖项中声明),而
common-lib
应该对客户隐藏(客户不必声明其gradle依赖项)。所以他们只声明cms库,如下所示:

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

dependencies {
  implementation 'com.example.shared:cms-lib:1.0-SNAPSHOT'
}
这意味着
common lib
嵌套了
cms lib
的依赖项

我希望
cms-lib
的客户可以访问嵌套依赖项
common-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;
在这种情况下,
supportlib
的公共类似乎在编译时不可用(可能仅在运行时可用)


如何在编译时访问嵌套依赖项?

您需要将
java库
应用于
cms库
项目。然后您需要在
api
配置中定义
common lib
,以便在
cms lib

您可以在以下文档中阅读更多关于
api
vs
implementation


可传递的依赖项并不意味着该依赖项包含在顶级jar中-
common lib
必须位于类路径上的某个位置才能编译(和运行)。只有
java library
plugin,而不是
java library plugin
谢谢!这个解决方案就是我一直在寻找的。它真的帮助了我。
# 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'
}