He desarrollado dos librerías: cms-lib
y common-lib
.
cms-lib
depende de common-lib
como este
# gradle.build of cms-lib
dependencies {
implementation 'com.example.shared:common-lib:1.0-SNAPSHOT'
}
common-lib
contiene algunas clases públicas - Fe com.example.shared.common.Content.java
La idea es que cms-lib
es para uso del cliente de terceros (que deben declarar en sus dependencias Gradle), mientras que common-lib
debe ser ocultado por parte del cliente (el cliente no tiene que declarar sus dependencias Gradle). Por lo que sólo declaran solamente cms-lib
- como esto:
# A
# build.gradle of a consumer of `cms-lib`
dependencies {
implementation 'com.example.shared:cms-lib:1.0-SNAPSHOT'
}
Eso significa que common-lib
se anida la dependencia de cms-lib
.
Espero que las clases públicas de la dependencia anidada common-lib
, se puede acceder por un cliente de cms-lib
. Pero resulta que no lo hacen accesible como me sale el error de compilación:
> 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;
Parece ser que en este caso, las clases públicas de support-lib
no está disponible en tiempo de compilación (probablemente sólo en tiempo de ejecución).
¿Cómo acceder a las dependencias anidadas en tiempo de compilación?
Usted tendrá que aplicar el java-library
al cms-lib
proyecto. A continuación, tendrá que definir common-lib
en la api
configuración con el fin de que esté disponible en la ruta de clase de un consumidor decms-lib
Puede leer más sobre api
vs implementation
en la documentación para el plug-in biblioteca de 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'
}