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
vsimplementation
可传递的依赖项并不意味着该依赖项包含在顶级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'
}