Estoy tratando de agregar una biblioteca externa a Liferay: Orika lib.
He agregado la dependencia de Gradle en build.gradle así:
compileInclude group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4'Estoy usando compilar Incluir para que el módulo también tenga la dependencia adjunta.
La lib funciona muy bien localmente . La he probado con un método principal dentro de la clase, pero cuando implemento en Portal recibo el siguiente error:
org.osgi.framework.BundleException: Could not resolve module: <YourModuleName> [2755]_ Unresolved requirement: Import-Package: com.google.common.base_ [Sanitized] Esto parece deberse a la falta de bibliotecas en el tiempo de ejecución, pero lo que no está tan claro es por qué se agregan estas dependencias en el momento de la compilación si cuando lo ejecuto dentro public static main funciona como se esperaba. Además, revisé las bibliotecas que Gradle descargó en mi Eclipse para ver si hay algún paquete con com.google.commom.base y no encontré ninguno.
Entonces, debido a que se realiza algún otro paso al compilar, verifiqué MANIFEST.MF en el contenedor generado (por ejemplo, eclipse-workspace<your_project_name>\modules<your_module_name>\build\libs) y luego eliminé la entrada com.google.commom.base del archivo. El error desapareció, pero ocurrió otro:
org.osgi.framework.BundleException: Could not resolve module: <your_module_name> [2755]_ Unresolved requirement: Import-Package: com.sun.jdi_ [Sanitized]Entonces, la pregunta es: ¿por qué se agregan esas dependencias y cómo puedo eliminarlas o satisfacerlas? - dado el hecho de que no los tengo en Eclipse, entonces iría a dejarlos.
Estas son mis conclusiones después de algunas horas dedicadas a esto:
Para los archivos jar externos, la táctica compileInclude no se comportó como esperaba; tal vez fue una buena pista, pero seguí los pasos que se detallan a continuación.
En mi situación, era mejor usar solo compileOnly cuando se incluía la dependencia. Entonces, el primer paso : agregue lo siguiente a su build.gradle :
compileOnly group: 'ma.glasnost.orika', name: 'orika-core', version: '1.5.4' En el segundo paso , debe indicar en el archivo bnd.bnd las otras dependencias que necesita el jar externo. En mi caso (Orika lib) necesitaba la siguiente lista: commons-compiler-3.0.8.jar,janino-3.0.8.jar,java-sizeof-0.0.5.jar,javassist-3.24.0-GA.jar ,paranamer-2.8.jar,@slf4j-api-1.7.26.jar - Revisé los detalles del repositorio para averiguarlo y obtuve la información de allí (p. ej., deaquí ). Entonces, lo que tuve que hacer después de agregar a build.gradle fue agregar la siguiente línea en bnd.bnd :
Include-Resource: @orika-core-1.5.4.jar,@commons-compiler-3.0.8.jar,@janino-3.0.8.jar,@java-sizeof-0.0.5.jar,@javassist-3.24.0-GA.jar,@paranamer-2.8.jar,@slf4j-api-1.7.26.jar El último paso fue excluir los paquetes que el proceso de compilación coloca en el archivo MANIFEST.MF . Me refiero aquí a los problemas que comienzan con el Unresolved requirement ... Para saber qué no era necesario, implementé varias veces y para cada vez agregué el paquete requerido a la lista Import-Package (esta es otra propiedad en el archivo bnd.bnd ). La lista final fue:
Import-Package: \ !com.sun.jdi.*,\ !com.sun.tools.attach,\ !com.google.common.base,\ !org.slf4j.impl,\ *Nota: puede resultarle útil leer más sobre lo que he escrito aquí y aquí .