Empaquetado automático de componentes
Empaquetado automático de componentes
Libertya Components

Indice
- Empaquetado automático de componentes
- Indice
- Introducción
- Archivo devinfo.properties
- Empaquetando un componente
- Empaquetando LY CORE
- Uso bajo Windows
- Referencias
Introducción
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.
El presente documento detalla el paso a paso necesario para realizar esta actividad.
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.
NOTA: dado que el presente es un desarrollo en curso, las definiciones aquí expuestas podrían llegar a sufrir modificaciones a futuro.
Archivo devinfo.properties
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:

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.
Estructura
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:
# === 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
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).
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).
# === 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
La segunda parte permite especificar qué es lo que se desea exportar, esto es:
- 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:
- preinstall.sql
- install.xml
- postinstall.xml
- manifest.properties.
- preinstall.sql
- IncludeClassesAndLibs: Incluir los siguientes:
- Archivos .class (previamente compilados desde Eclipse), esto en generalmente refiere al directorio bin de un proyecto.
- Archivos .jar (librerías externas), esto en general refiere al directorio lib de un proyecto.
- Archivos que impactarán en OXPRoot.jar, esto en general refiere al directorio serverRoot de un proyecto.
- Archivos que impactarán en OXPRootBase.war, esto en general refiere al directorio oxpRootBase de un proyecto.
- Archivos que impactarán en webui.war, esto en general refiere al directorio directorio webui de un proyecto.
- Archivos .class (previamente compilados desde Eclipse), esto en generalmente refiere al directorio bin de un proyecto.
- IncludeReports:
- Reportes y/o otros archivos ubicados en el directorio binarios de un proyecto.
# === 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
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.
Aquí es necesario indicar principalmente:
- ExportComponentVersionID: el AD_ComponentVersion_ID a exportar (o sea cual es la versión de componente a exportar)
- ExportDirectory: la ubicacion donde deberán ubicarse los archivos a exportarse (preinstall.sql, install.xml, postinstall.xml, etc.)
- ExportDirectoryEmptyFirst: vaciar el directorio donde generarán los archivos de exportación
- 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.
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.
# === 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
El cuarto apartado del archivo permite definir los siguientes:
- CreateJarTargetDir: Ubicación donde se almacenará el archivo .jar a generar
- 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.
- 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.
- 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.
Las restantes propiedades en principio no debería ser necesario modificarlas:
- CreateJarBinariesLocation: Ubicación de los reportes/binarios, en general el directorio es binarios.
- 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
- 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
- CreateJarServerRootLibLocation y CreateJarServerRootLocation: relacionadas con el empaquetado de clases y librerías para OXPRoot.jar.
- CreateJarOXPRootBaseLibLocation y CreateOXPRootBaseLocation: relacionadas con el empaquetado de clases y librerías para OXPRootBase.war.
- CreateJarWebUILibLocation y CreateWebUILocation: relacionadas con el empaquetado de clases y librerías para webui.war.
- 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.
# === SISTEMA DE VERSIONADO ===
# SVN o GIT? A fin de incluir el numero de revision en el jar
ProjectVersionControl=git
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.
# === 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
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.
Empaquetando un componente
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.
Estructura de proyectos
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:
- Directorios src, lib y bin
- Fuentes, librerías y compilados que luego radicarán en OXP.jar
- Fuentes, librerías y compilados que luego radicarán en OXP.jar
- Directorios src_serverRoot, lib_serverRoot y bin_serverRoot
- Fuentes, librerías y compilados que luego radicarán en OXPRoot.jar
- Fuentes, librerías y compilados que luego radicarán en OXPRoot.jar
- Directorios src_OXPRootBase, lib_serverRootBase y bin_serverRootBase
- Fuentes, librerías y compilados que luego radicarán en OXPRootBase.jar
- Fuentes, librerías y compilados que luego radicarán en OXPRootBase.jar
- Directorios src_webui, lib_webui y bin_webui
- Fuentes, librerías y compilados que luego radicarán en webui.jar

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.
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.

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.
Definiendo devinfo.properties
Dado que generaremos el jar correspondiente a LYECTN 1.0, el archivo devinfo.properties a utilizar se encuentra en data/upgrade_from_0.0.

El archivo devinfo.properties es el siguiente:
# === 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
# === 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
# === 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
# === 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
# === SISTEMA DE VERSIONADO ===
# SVN o GIT? A fin de incluir el numero de revision en el jar
ProjectVersionControl=svn
# === 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
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.
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.
Definición del proceso en Eclipse
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).

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.

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.
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).
Ejecución del proceso desde Eclipse
Al ejecutar el proceso obtendremos lo siguiente:
*** 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]
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
Exportando: Ecommerce Tienda Nube 1…
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
Finalizado!
IMPORTANTE: Si el componente se encontraba activo (o sea en desarrollo), temporalmente desactivará el desarrollo y al finalizar el export lo reactivará nuevamente.
Deteniendo el desarrollo del componente temporalmente…
…
Reactivando el desarrollo del componente…
En cualquier caso, preventivamente verificar que el mismo haya quedado activo si se van a realizar nuevas incorporaciones al diccionario de datos.
Archivos generados
En /tmp/lyectn1.0export obtendremos la nómina de archivos generados:

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:

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.
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:
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)
Ejecución del proceso desde terminal
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.
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:
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
De manera más sencilla, se puede utilizar simplemente el script PluginExporter.sh ubicado en utils, indicando el devinfo.properties a utilizar:
./PluginExporter.sh /home/usuario/workspace/org.libertya.ecommerce.tiendanube/trunk/data/upgrade_from_0.0/devinfo.properties
Empaquetando LY CORE
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.
En el siguiente ejemplo estaremos definiendo el devinfo.properties para el upgrade a LY 22.0 (ubicado en upgrade_from_21.0)

Es importante entonces desactivar la opción IncludeClassesAndLibs, solo cambios a base de datos y reportes:
# === 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
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:
# === 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
Por último, simplemente a modo de ejemplo forzaremos el nombre del jar a uno específico y lógicamente usaremos el archivo preinstall correspondiente:
# 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
Una vez ejecutado, obtendremos el jar con el contenido correspondiente:

Uso bajo Windows
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 /
Por ejemplo:
# === 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
# === 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
La ejecución es similar a Linux, ya sea indicando las librerías, por ejemplo:
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
O bien utilizando PluginExporter.bat ubicado en utils (disponible a partir de revision 46db4bb):
PluginExporter.bat C:\workspace\org.libertya.ecommerce.tiendanube\data\upgrade_from_0.0\devinfo.properties
De manera similar a Linux, se generarán los archivos correspondientes en los directorios especificados:


Recordar que debe contarse con un ambiente ejecutando Java 8 y donde el PATH contiene las rutas a herramientas tales como jar / svn / git.
Referencias
A modo de referencia, a contuación se listan algunos archivos devinfo.properties incorporados a los repositorios:
- https://github.com/Disytel-Consulting-SA/libertya/blob/master/data/core/upgrade_from_21.0/devinfo.properties
- https://github.com/Disytel-Consulting-SA/lyei/blob/master/data/upgrade_from_2.3/devinfo.properties
- svn://dev_server/svn/libertya/plugins/org.libertya.ecommerce.tiendanube/trunk/data/upgrade_from_0.0/devinfo.properties
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.