【发布时间】:2020-03-26 12:09:05
【问题描述】:
我开发了两个库: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-lib - 像这样:
# 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;
似乎在这种情况下,support-lib 的公共类在编译时不可用(可能仅在运行时)。
如何在编译时访问嵌套的依赖关系?
【问题讨论】:
-
传递依赖并不意味着依赖包含在顶级 jar 中 -
common-lib必须位于类路径中的某个位置才能编译(和运行)。
标签: java gradle compilation dependencies