Last modified by admin on 2026/07/18 17:45

Show last authors
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.