Wiki source code of Empaquetado automático de componentes
Last modified by admin on 2026/07/18 17:45
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | = Empaquetado automático de componentes {{id name="empaquetado-automático-de-componentes" /}}= | ||
| 2 | |||
| 3 | == Libertya Components {{id name="libertya-components" /}}== | ||
| 4 | |||
| 5 | [[image:image1.png]] | ||
| 6 | |||
| 7 | = Indice {{id name="indice" /}}= | ||
| 8 | |||
| 9 | {{toc/}} | ||
| 10 | |||
| 11 | = Introducción {{id name="introducción" /}}= | ||
| 12 | |||
| 13 | A partir de la revisión **f4fa85b** de **Libertya CORE**, es posible utilizar la herramienta de empaquetado automático de componentes, la cual genera el .jar a deployar de manera automática, incluyendo el export de metadatos, el archivo preinstall, librerías externas, reportes (binarios), etc., reduciendo así el esfuerzo que conlleva dicha tarea. | ||
| 14 | |||
| 15 | El presente documento detalla el paso a paso necesario para realizar esta actividad. | ||
| 16 | |||
| 17 | **NOTA**: al momento de escribir este documento, la funcionalidad sólo ha sido mayormente probada en plataformas **Linux**, en ambientes con **Java 8** y donde el **PATH** contiene las rutas a herramientas tales como **jar** / **svn** / **git**. Al final del documento se detalla un apartado específico con las adecuaciones necesarias para plataformas **Windows**. | ||
| 18 | |||
| 19 | **NOTA**: dado que el presente es un desarrollo en curso, las definiciones aquí expuestas podrían llegar a sufrir modificaciones a futuro. | ||
| 20 | |||
| 21 | = Archivo devinfo.properties {{id name="archivo-devinfo.properties" /}}= | ||
| 22 | |||
| 23 | A fin de poder utilizar esta funcionalidad, es necesario definir un archivo con nombre **devinfo.properties**. Exsitirá un archivo **devinfo.properties** por versión de componente y deberá ubicarse en el directorio **data/upgrade_from_X.X** correspondiente, por ejemplo: | ||
| 24 | |||
| 25 | [[image:image2.png]] | ||
| 26 | |||
| 27 | En este caso el archivo **devinfo.properties** ubicado en **data/upgrade_from_2.3** contendra la configuración adecuada para la generación de **LYEI 2.4**. | ||
| 28 | |||
| 29 | == Estructura {{id name="estructura" /}}== | ||
| 30 | |||
| 31 | El siguiente es un ejemplo de la información que se debe especificar en los archivos **devinfo.properties**. Se detalla a continuación cada parte principal del mismo y su correspondiente finalidad: | ||
| 32 | |||
| 33 | # === CONEXION A BASE DE DATOS DE DESARROLLO ===\\# Postgres host\\DBHost=localhost\\# Postgres port\\DBPort=5432\\# Postgres database\\DBName=libertya_plugin_electronic_invoice\\# Postgres user\\DBUser=libertya\\# Postgres pass\\DBPass=libertya | ||
| 34 | |||
| 35 | En esta primera parte se debe definir la información de conexión a la base de datos de desarrollo: servidor, puerto, nombre de BD, usuario y password (si se requiere) para conectar a postgres. Aquí es posible conectar tanto a una base de datos local como al “master” en el servidor de desarrollo (mediante un tunnel). | ||
| 36 | |||
| 37 | **NOTA**: Cabe mencionar que ciertos componentes no poseen base de datos de desarrollo dado que simplemente abarcan modificaciones a código fuente. Para éstos casos, en la propiedad **DBName** se puede especificar cualquier nombre de base de datos existente para ser usada como una conexión dummy, en conjunto con la propiedad **IncludeComponentExport** en **N** (ver detalles a continuación). | ||
| 38 | |||
| 39 | # === CONTENIDO A INCLUIR EN EL JAR ===\\# Incluir la exportacion del proyecto a nivel BDD (preinstall / metadatos)\\IncludeComponentExport=Y\\# Incluir la compilacion del proyecto (*.class) y librerias externas (*.jar)? - Utilizado para componentes, NO PARA LY CORE\\IncludeClassesAndLibs=Y\\# Incluir directorio reportes (directorio binarios)?\\IncludeReports=Y | ||
| 40 | |||
| 41 | La segunda parte permite especificar qué es lo que se desea exportar, esto es: | ||
| 42 | |||
| 43 | *. **IncludeComponentExport**: Incluir (o no) la exportación del componente a nivel base de datos, la cual generará los archivos en caso de que la propiedad tenga valor **Y**: | ||
| 44 | **. preinstall.sql\\ | ||
| 45 | **. install.xml\\ | ||
| 46 | **. postinstall.xml\\ | ||
| 47 | **. manifest.properties.\\ | ||
| 48 | *. **IncludeClassesAndLibs**: Incluir los siguientes: | ||
| 49 | **. Archivos **.class** (previamente compilados desde Eclipse), esto en generalmente refiere al directorio **bin** de un proyecto.\\ | ||
| 50 | **. Archivos **.jar** (librerías externas), esto en general refiere al directorio **lib** de un proyecto.\\ | ||
| 51 | **. Archivos que impactarán en **OXPRoot.jar**, esto en general refiere al directorio **serverRoot** de un proyecto.\\ | ||
| 52 | **. Archivos que impactarán en **OXPRootBase.war**, esto en general refiere al directorio **oxpRootBase** de un proyecto.\\ | ||
| 53 | **. Archivos que impactarán en **webui.war**, esto en general refiere al directorio directorio **webui** de un proyecto.\\ | ||
| 54 | *. **IncludeReports**: | ||
| 55 | **. Reportes y/o otros archivos ubicados en el directorio **binarios** de un proyecto. | ||
| 56 | |||
| 57 | # === EXPORTACION DE COMPONENTE ===\\# Version de componente a exportar (AD_ComponentVersion_ID).\\ExportComponentVersionID=1010113\\# Directorio destino de los archivos a exportar\\ExportDirectory=/tmp/lyei2.4export\\# Vaciar el directorio de exportacion previo al volcado de archivos\\ExportDirectoryEmptyFirst=Y\\# Proceso custom (ej. el AD_Process_ID de PostInstallUpgradeFrom21.0). Si no se especifica se utiliza el proceso post-install por defecto\\ExportProcessID=\\# Exportar desde un AD_Changelog_ID en particular. Idicar 0 si no se desea filtrar por este criterio\\ExportChangelogFromID=0\\# Exportar hasta un AD_Changelog_ID en particular. Idicar 0 si no se desea filtrar por este criterio\\ExportChangelogToID=0\\# Unicamente entradas del changelog del usuario especificado (AD_User_ID). Idicar 0 si no se desea filtrar por este criterio\\ExportFromUserID=0\\# Es un patch que complementa un release anterior de esta version de componente?\\ExportAsPatch=N\\# Validar consistencia de la bitacora?\\ExportAndValidateConsistency=Y\\# Deshabilitar entradas inconsistentes de la bitacora?\\ExportAndDisableInvalidEntries=Y | ||
| 58 | |||
| 59 | El tercer apartado involucra la exportación del componente a nivel BDD (siempre que se haya especificado **IncludeComponentExport=Y**). La información a suministrar es similar a la que se vuelca en la ventana **Exportar Componente** bajo el perfil **System Administrator** en Libertya. | ||
| 60 | |||
| 61 | Aquí es necesario indicar principalmente: | ||
| 62 | |||
| 63 | *. **ExportComponentVersionID**: el AD_ComponentVersion_ID a exportar (o sea cual es la versión de componente a exportar)\\ | ||
| 64 | *. **ExportDirectory**: la ubicacion donde deberán ubicarse los archivos a exportarse (preinstall.sql, install.xml, postinstall.xml, etc.)\\ | ||
| 65 | *. **ExportDirectoryEmptyFirst**: vaciar el directorio donde generarán los archivos de exportación\\ | ||
| 66 | *. **ExportProcessID**: si se desea indicar un PostInstall específico (por ejemplo **LYEIPostInstallUpgradeFrom2_3** si es que existiera), se debe indicar el AD_Process_ID correspondiente. En caso de no especificar un proceso PostInstall (ya sea comentando la linea o dejando la propiedad sin valor), se utilizará el proceso por defecto **PluginPostInstallProcess**. | ||
| 67 | |||
| 68 | El resto de propiedades permiten limitar el export a únicamente una parte del changelog, filtrar por usuario, indicar si el export es un patch, validar consistencia de datos, etc. Si bien en general no debería ser necesario modificar estos valores, la opción de hacerlo se encuentra disponible. | ||
| 69 | |||
| 70 | # === GENERACION DEL JAR ===\\# Directorio destino donde se generara el jar (puede ser el mismo del export u otro)\\CreateJarTargetDir=/tmp/lyei2.4release\\#Nombre del packagename a crear - Si se deja en blanco se genera segun los metadatos\\#CreateJarForcePackageName=com.examplePackage\\# Nombre del archivo a crear - Si se deja en blanco la propiedad se genera segun los metadatos\\#CreateJarForceFileName=org.libertya.ecommerce.tiendanube.1.0.jar\\# Archivo preinstall a utilizar en el jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarPreinstallFile=preinstall_from_2.3.sql\\# Directorio reportes/binarios (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarBinariesLocation=binarios\\# Directorio de las librerias externas (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarLibsLocation=../../lib\\# Directorio para OXP.jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarClassesLocation=../../bin\\# Directorio para libs de OXPRoot.jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarServerRootLibLocation=../../lib_serverRoot\\# Directorio para OXPRoot.jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarServerRootLocation=../../bin_serverRoot\\# Directorio para libs de OXPRootBase.war (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarOXPRootBaseLibLocation=../../lib_oxpRootBase\\# Directorio para OXPRootBase.war (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarOXPRootBaseLocation=../../bin_oxpRootBase\\# Directorio para libs de webui.war (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarWebUILibLocation=../../lib_webui\\# Directorio para webui.war (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarWebUILocation=../../bin_webui\\# Archivos a omitir separados por coma. Por ejemplo: Test.class,OpenXpertya.class,FooBar.class\\CreateJarSkipFiles=OpenXpertya.class | ||
| 71 | |||
| 72 | El cuarto apartado del archivo permite definir los siguientes: | ||
| 73 | |||
| 74 | *. **CreateJarTargetDir**: Ubicación donde se almacenará el archivo .jar a generar\\ | ||
| 75 | *. **CreateJarForcePackageName**: Forzar el packagename del archivo. Si se comenta o se deja la propiedad sin valor, el nombre se generará considerando el packagename del componente. Esta propiedad es ignorada si se especifica //CreateJarForceFileName//.\\ | ||
| 76 | *. **CreateJarForceFileName**: Forzar nombre del archivo. Si se comenta o se deja la propiedad sin valor, el nombre se generará considerando criterios como: el **publicname** del componente, la **versión**, el **max changelog** exportado, la **revision** (svn o git) en la que se encuentra el proyecto.\\ | ||
| 77 | *. **CreateJarPreinstallFile**: Permite indicar si queremos pisar el archivo **preinstall.sql** generado automáticamente por el exportador con el archivo preinstall que se gestiona manualmente. Salvo algún caso excepcional, esta propiedad siempre debería especificarse con el nombre del archivo preinstall a utilizar. Dado que para una versión dada el archivo **devinfo.properties** y el archivo **preinstall_from_X.X.sql** se encuentran en el mismo directorio, en principio no es necesario especificar path alguno hasta el archivo, solo su nombre. | ||
| 78 | |||
| 79 | Las restantes propiedades en principio no debería ser necesario modificarlas: | ||
| 80 | |||
| 81 | *. **CreateJarBinariesLocation**: Ubicación de los reportes/binarios, en general el directorio es **binarios**.\\ | ||
| 82 | *. **CreateJarLibsLocation**: Ubicación de librerías externas, en general es el directorio **lib**, pero considerando la ubicación “base” de **devinfo.properties**, y es por esto que el valor es **../../lib**\\ | ||
| 83 | *. **CreateJarClassesLocation**: Ubicación de archivos .class compilados desde Eclipse, en general es el directorio **bin**, pero considerando la ubicación “base” de **devinfo.properties**, y es por esto que el valor es **../../bin**\\ | ||
| 84 | *. **CreateJarServerRootLibLocation** y **CreateJarServerRootLocation**: relacionadas con el empaquetado de clases y librerías para **OXPRoot.jar**.\\ | ||
| 85 | *. **CreateJarOXPRootBaseLibLocation** y **CreateOXPRootBaseLocation**: relacionadas con el empaquetado de clases y librerías para **OXPRootBase.war**.\\ | ||
| 86 | *. **CreateJarWebUILibLocation** y **CreateWebUILocation**: relacionadas con el empaquetado de clases y librerías para **webui.war**.\\ | ||
| 87 | *. **CreateJarSkipFiles**: lista de archivos a omitir separado por comas en el volcado hacia el directorio donde se generará el jar. Si la propiedad está comentada no se omitirá ningún archivo. | ||
| 88 | |||
| 89 | # === SISTEMA DE VERSIONADO ===\\# SVN o GIT? A fin de incluir el numero de revision en el jar\\ProjectVersionControl=git | ||
| 90 | |||
| 91 | El quinto parrafo simplemente requiere especificar si el control de versionado del proyecto se encuentra bajo git o bajo svn. Esto es necesario para saber el comando a ejecutar a fin de resolver el número de revisión en la que actualmente se encuentra el proyecto. | ||
| 92 | |||
| 93 | # === ACCIONES POST EMPAQUETADO ===\\# Directorio destino hacia donde copiar el Jar generado\\PostBuildCopyJarToLocation=/ServidorOXP/lib/plugins\\# Script a invocar como actividad final (requiere especificar ruta completa)\\PostBuildExecuteScriptFile=/ServidorOXP/ConfigurarAuto.sh\\# Ubicacion en invocación a Script como actividad final\\PostBuildExecuteScriptDir=/ServidorOXP | ||
| 94 | |||
| 95 | Finalmente, a partir del commit **83a97ee** de **org.libertya**, es posible definir las últimas propiedades que permiten especificar actividades post-creación del Jar, como por ejemplo copiar el archivo a una ubicación en particular o bien ejecutar un script específico. **Vale aclarar que en estos casos se deberá contar con los permisos necesarios de escritura/ejecución para poder realizar estas acciones**. Lógicamente, de no existir estas entradas, el proceso omitirá dichas actividades. | ||
| 96 | |||
| 97 | = Empaquetando un componente {{id name="empaquetando-un-componente" /}}= | ||
| 98 | |||
| 99 | En este ejemplo, trabajaremos sobre una versión modificada del componente **LYECTN 1.0**, en donde se definieron todas las posibles rutas de configuración a fin de comprender cómo estructurar los proyectos. | ||
| 100 | |||
| 101 | == Estructura de proyectos {{id name="estructura-de-proyectos" /}}== | ||
| 102 | |||
| 103 | A fin de minimizar errores y automatizar lo más posible el proceso de empaquetado, se recomienda definir la estructura del proyecto de manera tal que se cuente con directorios de código fuente (y sus correspondientes directorios de compilación) independientes según la librería donde deberán ser posteriormente embebidos (OXP.jar, OXPRoot.jar, OXPRootBase.war, webui.war). En la estructura de los proyectos tendremos entonces: | ||
| 104 | |||
| 105 | *. Directorios **src**, **lib** y **bin** | ||
| 106 | **. Fuentes, librerías y compilados que luego radicarán en **OXP.jar**\\ | ||
| 107 | *. Directorios **src_serverRoot**, **lib_serverRoot** y **bin_serverRoot** | ||
| 108 | **. Fuentes, librerías y compilados que luego radicarán en **OXPRoot.jar**\\ | ||
| 109 | *. Directorios **src_OXPRootBase**, **lib_serverRootBase** y **bin_serverRootBase** | ||
| 110 | **. Fuentes, librerías y compilados que luego radicarán en **OXPRootBase.jar**\\ | ||
| 111 | *. Directorios **src_webui**, **lib_webui** y **bin_webui** | ||
| 112 | **. Fuentes, librerías y compilados que luego radicarán en **webui.jar** | ||
| 113 | |||
| 114 | **[[image:image3.png]]** | ||
| 115 | |||
| 116 | **NOTA:** Los nombres y ubicaciones a definir para los directorios pueden variar, pero deberán coincidir con la configuración de **devinfo.properties** correspondiente, tal como se mostrará en el siguiente apartado. | ||
| 117 | |||
| 118 | En **Propiedades del proyecto → Java Build Path → Source** se puede seleccionar la opción **Allow output folders for source folders**, lo que permitirá definir cada directorio de compilación específico para cada directorio de código fuente. | ||
| 119 | |||
| 120 | [[image:image4.png]] | ||
| 121 | |||
| 122 | Notar que para **src_webui** el directorio destino difiere de los otros casos dado que las clases compiladas radicarán dentro de **WEB-INF/classes** en **webui.war**. | ||
| 123 | |||
| 124 | == Definiendo devinfo.properties {{id name="definiendo-devinfo.properties" /}}== | ||
| 125 | |||
| 126 | Dado que generaremos el jar correspondiente a **LYECTN 1.0**, el archivo **devinfo.properties** a utilizar se encuentra en **data/upgrade_from_0.0**. | ||
| 127 | |||
| 128 | [[image:image5.png]] | ||
| 129 | |||
| 130 | El archivo **devinfo.properties** es el siguiente: | ||
| 131 | |||
| 132 | # === CONEXION A BASE DE DATOS DE DESARROLLO ===\\# Postgres host\\DBHost=localhost\\# Postgres port\\DBPort=5432\\# Postgres database\\DBName=libertya_plugin_ecommerce_tiendanube\\# Postgres user\\DBUser=libertya\\# Postgres pass\\DBPass=libertya | ||
| 133 | |||
| 134 | # === CONTENIDO A INCLUIR EN EL JAR ===\\# Incluir la exportacion del proyecto a nivel BDD (preinstall / metadatos)\\IncludeComponentExport=Y\\# Incluir la compilacion del proyecto (*.class) y librerias externas (*.jar)? - Utilizado para componentes, NO PARA LY CORE\\IncludeClassesAndLibs=Y\\# Incluir directorio reportes (directorio binarios)?\\IncludeReports=Y | ||
| 135 | |||
| 136 | # === EXPORTACION DE COMPONENTE ===\\# Version de componente a exportar (AD_ComponentVersion_ID)\\ExportComponentVersionID=1010203\\# Directorio destino de los archivos a exportar\\ExportDirectory=/tmp/lyectn1.0export\\# Proceso custom (ej. el AD_Process_ID de PostInstallUpgradeFrom21.0). Si no se especifica se utiliza el proceso post-install por defecto\\ExportProcessID=1010661\\# Exportar desde un AD_Changelog_ID en particular. Idicar 0 si no se desea filtrar por este criterio\\ExportChangelogFromID=0\\# Exportar hasta un AD_Changelog_ID en particular. Idicar 0 si no se desea filtrar por este criterio\\ExportChangelogToID=0\\# Unicamente entradas del changelog del usuario especificado (AD_User_ID). Idicar 0 si no se desea filtrar por este criterio\\ExportFromUserID=0\\# Es un patch que complementa un release anterior de esta version de componente?\\ExportAsPatch=N\\# Validar consistencia de la bitacora?\\ExportAndValidateConsistency=Y\\# Deshabilitar entradas inconsistentes de la bitacora?\\ExportAndDisableInvalidEntries=Y | ||
| 137 | |||
| 138 | # === GENERACION DEL JAR ===\\# Directorio destino donde se generara el jar (puede ser el mismo del export u otro)\\CreateJarTargetDir=/tmp/lyectn1.0release\\#Nombre del packagename a crear - Si se deja en blanco se genera segun los metadatos\\#CreateJarForcePackageName=com.examplePackage\\# Nombre del archivo a crear - Si se deja en blanco la propiedad se genera segun los metadatos\\#CreateJarForceFileName=org.libertya.ecommerce.tiendanube.1.0.jar\\# Archivo preinstall a utilizar en el jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarPreinstallFile=preinstall_from_0.0.sql\\# Directorio reportes/binarios (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarBinariesLocation=binarios\\# Directorio de las librerias externas (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarLibsLocation=../../lib\\# Directorio para OXP.jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarClassesLocation=../../bin\\# Directorio para libs de OXPRoot.jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarServerRootLibLocation=../../lib_serverRoot\\# Directorio para OXPRoot.jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarServerRootLocation=../../bin_serverRoot\\# Directorio para libs de OXPRootBase.war (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarOXPRootBaseLibLocation=../../lib_oxpRootBase\\# Directorio para OXPRootBase.war (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarOXPRootBaseLocation=../../bin_oxpRootBase\\# Directorio para libs de webui.war (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarWebUILibLocation=../../lib_webui\\# Directorio para webui.war (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarWebUILocation=../../bin_webui\\# Archivos a omitir separados por coma. Por ejemplo: Test.class,OpenXpertya.class,FooBar.class\\CreateJarSkipFiles=OpenXpertya.class | ||
| 139 | |||
| 140 | # === SISTEMA DE VERSIONADO ===\\# SVN o GIT? A fin de incluir el numero de revision en el jar\\ProjectVersionControl=svn | ||
| 141 | |||
| 142 | # === ACCIONES POST EMPAQUETADO ===\\# Directorio destino hacia donde copiar el Jar generado\\PostBuildCopyJarToLocation=/ServidorOXP/lib/plugins\\# Script a invocar como actividad final (requiere especificar ruta completa)\\PostBuildExecuteScriptFile=/ServidorOXP/ConfigurarAuto.sh\\# Ubicacion en invocación a Script como actividad final\\PostBuildExecuteScriptDir=/ServidorOXP | ||
| 143 | |||
| 144 | En función de esta configuración, estamos indicando que nos conectaremos a la base de datos local de desarrollo de Tienda Nube, y que queremos un **empaquetado completo**, abarcando pisado de preinstall, metadatos, librerías, clases, reportes, etc. Adicionalmente, se encuentra comentada las propiedades **CreateJarForcePackageName** y **CreateJarForceFileName**, lo que significa que el nombre del archivo final será generado completamente de manera automática. Posteriormente indicamos que el proyecto está versionado bajo **svn**. Por último especificamos que luego de empaquetado el .jar final, queremos copiarlo a **/ServidorOXP/lib/plugins** para finalmente ejecutar **ConfigurarAuto.sh**. | ||
| 145 | |||
| 146 | Notar que en la propiedad **CreateJarWebUILocation** se especifica **../../bin_webui** a fin de abarcar cualquier archivo adicional que el proyecto pueda llegar a contener además de las clases compiladas en **WEB-INF/classes**. | ||
| 147 | |||
| 148 | == Definición del proceso en Eclipse {{id name="definición-del-proceso-en-eclipse" /}}== | ||
| 149 | |||
| 150 | En Eclipse generar una **Run Configuration**, indicando el proyecto **org.libertya.ecommerce.tiendanube** y la clase **org.openXpertya.plugin.install.ExportPlugin** (la cual es de CORE, pero el componente referencia al proyecto org.libertya, con lo cual es classloader encontrará dicha clase). | ||
| 151 | |||
| 152 | [[image:image6.png]] | ||
| 153 | |||
| 154 | En la pestaña Arguments se deberá especificar la ruta al archivo **devinfo.properties** en cuestión. Aquí es posible definir la ruta absoluta o una relativa. En caso de definir una ruta relativa, dependerá del **Working directory** configurado. El valor por defecto es el directorio raíz del proyecto definido en **Proyect**. | ||
| 155 | |||
| 156 | [[image:image7.png]] | ||
| 157 | |||
| 158 | **IMPORTANTE**: También es posible directamente definir en **Proyect** a **LY CORE** (o sea org.libertya). Esto es de utilidad para componentes que NO se apoyen en el LY CORE público, si no en otro CORE como **libertya.core.teh** (el cual por el momento no cuenta con esta funcionalidad). En ese caso además de definir **org.libertya** en **Proyect**, en la pestaña de Arguments será necesario cambiar el **Working Directory** al directorio raiz del proyecto en cuestión o bien usar una ruta absoluta al **devinfo.properties**. | ||
| 159 | |||
| 160 | **NOTA**: Tal como se detalla más adelante en este mismo documento, tambien es posible ejecutar este proceso desde terminal mediante **PluginExporter.sh** ubicado en **ServidorOXP/utils** (se requerirá un ServidorOXP con los binarios correspondientes a la revisión **f4fa85b** o posterior). | ||
| 161 | |||
| 162 | == Ejecución del proceso desde Eclipse {{id name="ejecución-del-proceso-desde-eclipse" /}}== | ||
| 163 | |||
| 164 | Al ejecutar el proceso obtendremos lo siguiente: | ||
| 165 | |||
| 166 | ~*~** 2023-07-06 11:55:51.155 OpenXpertya Log (CLogConsole) ~*~**\\11:55:50.792 OpenXpertya.startup: Libertya (r) Versión 22.0_03-05-2022 - Software Libre de Gestión- (c) 2022 DISYTEL; Implementación: 1.0 - Disytel S.A. [1]\\11:55:50.792 OpenXpertya.startup: /ServidorOXP - Java HotSpot(TM) 64-Bit Server VM 25.121-b13 - Linux 5.4.0-150-generic unknown [1] | ||
| 167 | |||
| 168 | === PLUGIN EXPORTER ===\\localhost{localhost-libertya_plugin_ecommerce_tiendanube-libertya}\\Database=PostgreSQL - 9.5.19\\Driver =PostgreSQL JDBC Driver - 42.0.0.jre6 - via DataSource\\Config:\\CreateJarBinariesLocation=binarios\\CreateJarClassesLocation=../../bin\\CreateJarLibsLocation=../../lib\\CreateJarOXPRootBaseLibLocation=../../lib_oxpRootBase\\CreateJarOXPRootBaseLocation=../../bin_oxpRootBase\\CreateJarPreinstallFile=preinstall_from_0.0.sql\\CreateJarServerRootLibLocation=../../lib_serverRoot\\CreateJarServerRootLocation=../../bin_serverRoot\\CreateJarTargetDir=/tmp/lyectn1.0release\\CreateJarWebUILocation=../../bin_webui\\DBHost=localhost\\DBName=libertya_plugin_ecommerce_tiendanube\\DBPass=libertya\\DBPort=5432\\DBUser=libertya\\ExportAndDisableInvalidEntries=Y\\ExportAndValidateConsistency=Y\\ExportAsPatch=N\\ExportChangelogFromID=0\\ExportChangelogToID=0\\ExportComponentVersionID=1010203\\ExportDirectory=/tmp/lyectn1.0export\\ExportFromUserID=0\\ExportProcessID=1010661\\IncludeClassesAndLibs=Y\\IncludeComponentExport=Y\\IncludeReports=Y\\ProjectVersionControl=svn | ||
| 169 | |||
| 170 | ===========\\Exportando: Ecommerce Tienda Nube 1…\\=========== | ||
| 171 | |||
| 172 | Archivos exportados a: /tmp/lyectn1.0export\\Jar final generado en: /tmp/lyectn1.0release\\Jar final copiado en: /ServidorOXP/lib/plugins\\Ejecutado script: /ServidorOXP/ConfigurarAuto.sh | ||
| 173 | |||
| 174 | ===========\\Finalizado!\\=========== | ||
| 175 | |||
| 176 | **IMPORTANTE**: Si el componente se encontraba activo (o sea en desarrollo), temporalmente desactivará el desarrollo y al finalizar el export lo reactivará nuevamente. | ||
| 177 | |||
| 178 | Deteniendo el desarrollo del componente temporalmente…\\…\\Reactivando el desarrollo del componente… | ||
| 179 | |||
| 180 | En cualquier caso, preventivamente **verificar que el mismo haya quedado activo** si se van a realizar nuevas incorporaciones al diccionario de datos. | ||
| 181 | |||
| 182 | == Archivos generados {{id name="archivos-generados" /}}== | ||
| 183 | |||
| 184 | En **/tmp/lyectn1.0export** obtendremos la nómina de archivos generados: | ||
| 185 | |||
| 186 | [[image:image8.png]] | ||
| 187 | |||
| 188 | En **/tmp/lyectn1.0release** obtendremos el jar empaquetado con el nombre **org.libertya.ecommerce.tiendanube_v1_c2507724_r6348.jar** conteniendo los archivos correspondientes, listo para su deploy: | ||
| 189 | |||
| 190 | [[image:image9.png]] | ||
| 191 | |||
| 192 | **NOTA**: El número de revisión que el proceso incluye en el nombre del archivo dependerá del actual número de revisión que devuelve svn/git al consultar por ésta. En todo caso **se recomienda validar el dato generado**, o bien realizar un SVN Update / GIT Pull si se desea contar con el número de revisión más reciente del proyecto. | ||
| 193 | |||
| 194 | **NOTA**: En caso de no encontrar un archivo (por ejemplo preinstall_from_0.0.sql) o un directorio (lib, bin, binarios), esto se indicará en pantalla, por ejemplo: | ||
| 195 | |||
| 196 | WARNING: Directorio binarios omitido (no encontrado)\\WARNING: Archivo preinstall_from_0.0.sql omitido (no encontrado)\\WARNING: Directorio ../../lib_serverRoot omitido (no encontrado)\\WARNING: Directorio ../../bin_serverRoot omitido (no encontrado)\\WARNING: Directorio ../../lib_oxpRootBase omitido (no encontrado)\\WARNING: Directorio ../../bin_oxpRootBase omitido (no encontrado)\\WARNING: Directorio ../../lib_webui omitido (no encontrado)\\WARNING: Directorio ../../bin_webui omitido (no encontrado) | ||
| 197 | |||
| 198 | == Ejecución del proceso desde terminal {{id name="ejecución-del-proceso-desde-terminal" /}}== | ||
| 199 | |||
| 200 | También es posible ejecutar el proceso desde terminal, lo cual permite incluir este empaquetado como parte de un pipeline integrador, por ejemplo un workflow de CI/CD. | ||
| 201 | |||
| 202 | Cabe destacar que contando con un único ServidorOXP con los binarios correspondientes a la revisión **f4fa85b** o posterior ya es suficiente para generar el empaquetado de cualquier componente. Incluso es posible disparar este proceso únicamente con las librerías **OXP.jar** y **OXPXLib.jar** dado que son las únicas que se requieren para su ejecución, por ejemplo: | ||
| 203 | |||
| 204 | java -Dfile.encoding=UTF-8 -classpath ~$OXP_HOME/lib/OXP.jar:~$OXP_HOME/lib/OXPXLib.jar org.openXpertya.plugin.install.ExportPlugin /home/usuario/workspace/org.libertya.ecommerce.tiendanube/trunk/data/upgrade_from_0.0/devinfo.properties | ||
| 205 | |||
| 206 | De manera más sencilla, se puede utilizar simplemente el script **PluginExporter.sh** ubicado en **utils**, indicando el **devinfo.properties** a utilizar: | ||
| 207 | |||
| 208 | ./PluginExporter.sh /home/usuario/workspace/org.libertya.ecommerce.tiendanube/trunk/data/upgrade_from_0.0/devinfo.properties | ||
| 209 | |||
| 210 | = Empaquetando LY CORE {{id name="empaquetando-ly-core" /}}= | ||
| 211 | |||
| 212 | Este procedimiento también es factible realizarlo para el proyect org.libertya, pero únicamente para cambios en metadatos (preinstall, changelog), dado que los compilados se generan mediante **utils_dev/Compilar.sh** y es un proceso totalmente diferente al de un componente. | ||
| 213 | |||
| 214 | En el siguiente ejemplo estaremos definiendo el **devinfo.properties** para el upgrade a LY 22.0 (ubicado en **upgrade_from_21.0**) | ||
| 215 | |||
| 216 | [[image:image10.png]] | ||
| 217 | |||
| 218 | Es importante entonces desactivar la opción **IncludeClassesAndLibs**, solo cambios a base de datos y reportes: | ||
| 219 | |||
| 220 | # === CONTENIDO A INCLUIR EN EL JAR ===\\# Incluir la exportacion del proyecto a nivel BDD (preinstall / metadatos)\\IncludeComponentExport=Y\\# Incluir la compilacion del proyecto (*.class) y librerias externas (*.jar)? - Utilizado para componentes, NO PARA LY CORE\\IncludeClassesAndLibs=N\\# Incluir directorio reportes (directorio binarios)?\\IncludeReports=Y | ||
| 221 | |||
| 222 | En este caso exportaremos el **ComponentVersionID** **1010240** de CORE, el cual es justamente la versión **22.0** de CORE. Adicionalmente, estamos indicando el **ExportProcessID** **1010710** el cual es **PostInstallUpgradeFrom21.0**: | ||
| 223 | |||
| 224 | # === EXPORTACION DE COMPONENTE ===\\# Version de componente a exportar (AD_ComponentVersion_ID)\\ExportComponentVersionID=1010240\\# Directorio destino de los archivos a exportar\\ExportDirectory=/tmp/core22export\\# Proceso custom (ej. el AD_Process_ID de PostInstallUpgradeFrom21.0). Si no se especifica se utiliza el proceso post-install por defecto\\ExportProcessID=1010710\\# Exportar desde un AD_Changelog_ID en particular. Idicar 0 si no se desea filtrar por este criterio | ||
| 225 | |||
| 226 | Por último, simplemente a modo de ejemplo forzaremos el nombre del jar a uno específico y lógicamente usaremos el archivo preinstall correspondiente: | ||
| 227 | |||
| 228 | # Nombre del archivo a crear - Si se deja en blanco la propiedad se genera segun los metadatos\\CreateJarForceFileName=org.libertya.core.upgrade_21.0_22.0.jar\\# Archivo preinstall a utilizar en el jar (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarPreinstallFile=preinstall_from_21.0.sql | ||
| 229 | |||
| 230 | Una vez ejecutado, obtendremos el jar con el contenido correspondiente: | ||
| 231 | |||
| 232 | [[image:image11.png]] | ||
| 233 | |||
| 234 | = Uso bajo Windows {{id name="uso-bajo-windows" /}}= | ||
| 235 | |||
| 236 | En Windows es posible utilizar esta funcionalidad, pero es importante tener en cuenta que las rutas del archivo devinfo.properties deben ser cambiadas adecuadamente. Básicamente esto implica utilizar \\ en lugar de / | ||
| 237 | |||
| 238 | Por ejemplo: | ||
| 239 | |||
| 240 | # === EXPORTACION DE COMPONENTE ===\\# Directorio destino de los archivos a exportar\\ExportDirectory=C:~\~\tmp~\~\lyectn1.0export\\# Proceso custom (ej. el AD_Process_ID de PostInstallUpgradeFrom21.0). Si no se especifica se utiliza el proceso post-install por defecto | ||
| 241 | |||
| 242 | # === GENERACION DEL JAR ===\\# Directorio destino donde se generara el jar (puede ser el mismo del export u otro)\\CreateJarTargetDir=C:~\~\tmp~\~\lyectn1.0release\\# Directorio de la compilacion (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarLibsLocation=..\\..\\lib\\# Directorio de las librerias externas (relativo a directorio data del proyecto donde reside este archivo de propiedades)\\CreateJarClassesLocation=..\\..\\bin | ||
| 243 | |||
| 244 | La ejecución es similar a Linux, ya sea indicando las librerías, por ejemplo: | ||
| 245 | |||
| 246 | java -Dfile.encoding=UTF-8 -classpath OXP.jar;OXPXLib.jar org.openXpertya.plugin.install.ExportPlugin C:\workspace\org.libertya.ecommerce.tiendanube\data\upgrade_from_0.0\devinfo.properties | ||
| 247 | |||
| 248 | O bien utilizando **PluginExporter.bat** ubicado en **utils** (disponible a partir de revision **46db4bb**): | ||
| 249 | |||
| 250 | PluginExporter.bat C:\workspace\org.libertya.ecommerce.tiendanube\data\upgrade_from_0.0\devinfo.properties | ||
| 251 | |||
| 252 | De manera similar a Linux, se generarán los archivos correspondientes en los directorios especificados: | ||
| 253 | |||
| 254 | [[image:image12.png]] | ||
| 255 | |||
| 256 | [[image:image13.png]] | ||
| 257 | |||
| 258 | Recordar que debe contarse con un ambiente ejecutando **Java 8** y donde el **PATH** contiene las rutas a herramientas tales como **jar** / **svn** / **git**. | ||
| 259 | |||
| 260 | = Referencias {{id name="referencias" /}}= | ||
| 261 | |||
| 262 | A modo de referencia, a contuación se listan algunos archivos **devinfo.properties** incorporados a los repositorios: | ||
| 263 | |||
| 264 | *. https://github.com/Disytel-Consulting-SA/libertya/blob/master/data/core/upgrade_from_21.0/devinfo.properties | ||
| 265 | *. https://github.com/Disytel-Consulting-SA/lyei/blob/master/data/upgrade_from_2.3/devinfo.properties | ||
| 266 | *. svn:~/~/dev_server/svn/libertya/plugins/org.libertya.ecommerce.tiendanube/trunk/data/upgrade_from_0.0/devinfo.properties | ||
| 267 | |||
| 268 | **NOTA**: Los archivos **devinfo.properties** pueden ser incluidos en los commits (similar a cuando se incluye un archivo .classpath por ejemplo). La única salvedad a tener en cuenta es que en dichos archivos se puede llegar a almacenar información sensible: la password del usuario de postgres en caso de que se esté conectando a una instancia postgres configurada con una política de seguridad no trust. |