una tutorial sistema programa libreria fuente codigo biblioteca java android annotations dependencies gson

java - tutorial - Use una biblioteca en las clases generadas del procesador



sistema de libreria en java (4)

Estoy desarrollando una biblioteca para generar clases usando anotaciones y procesadores. Las clases generadas deberían usar la biblioteca Gson de google.

Mi pregunta es: ¿Dónde debería agregar la dependencia de Gson? Actualmente lo estoy agregando al build.gradle del procesador, pero cuando se generan las clases, Gson no se encuentra y Android Studio sugiere agregarlo al módulo de la aplicación.

build.gradle del procesador :

implementation project('':lib-annotation'') implementation ''com.squareup:javapoet:1.9.0'' implementation ''com.google.code.gson:gson:2.8.1'' implementation ''com.google.auto.service:auto-service:1.0-rc3''

build.gradle de la aplicación :

implementation project('':lib-annotation'') annotationProcessor project('':lib-processor'')

¡Cualquier ayuda sería muy apreciada, gracias!

PD: El proyecto está destinado a ser una biblioteca. Espero que los usuarios solo incluyan mi biblioteca en su archivo gradle, no la "sub dependencia".


El simple hecho de usar la implementación evita que uses la dependencia transitiva .

El proyecto principal no puede usar ni invocar las dependencias que agregó a su biblioteca.

Como se le recuerda a los documentos, la configuración de implementación se debe usar para declarar dependencias que son internas al componente.

Por lo tanto, debe usar api O compile lugar de implementation o agregar una condición a su biblioteca transitiva, por ejemplo:

implementation (''com.google.code.gson:gson:2.8.1''){ transitive = true; }



Además de que la implementación oculta la dependencia y por lo tanto la mantiene fuera de la ruta de la aplicación (por lo que si necesita exponer a Gson, evite usar la implementación), el problema se debe a que está compilando / implementando el módulo de biblioteca en lugar de usar un aar / jar / apklib paquete. Prueba esto:

-Añada el complemento Android Maven Gradle al proyecto de la biblioteca y configúrelo.

-Utilizando el complemento, compila e instala la biblioteca en tu repositorio Maven local. En lugar de usar compile / api / implementation para agregar la biblioteca a la aplicación, incluya mavenLocal () en su build.gradle y luego agregue la biblioteca como una dependencia regular. Todas las dependencias necesarias deberían estar allí.

Aquí hay un ejemplo del complemento, en caso de que lo necesite: https://github.com/fcopardo/EnhancedMapView


De acuerdo, finalmente solucioné el problema.

Tuve que agregar la dependencia de Gson en el procesador build.gradle usando implementation o compile :

implementation ''com.google.code.gson:gson:2.8.1''

Y agregue la dependencia nuevamente en la anotación build.gradle utilizando compile :

compile ''com.google.code.gson:gson:2.8.1''

Creo que no funcionaba porque la dependencia de Gson estaba en el procesador build.gradle que se incluye usando annotationProcessor ''lib-processor'' (De alguna manera la "transitividad" no se aplicaba). Por lo tanto, puse la dependencia Gson en la anotación build.gradle ya que la incluí usando la implementation ''lib-annotation'' y funcionó.

Espero que ayude