Saltar al contenido principal

Configuración del proyecto con Apache Maven

Requisitos previos​

En este ejemplo vamos a utilizar Apache Maven, por lo que puede hacer clic en el enlace anterior para obtener información sobre cómo instalarlo.

También necesitará tener Java instalado.

Instale la plataforma Netuno. El proyecto en Java se integrará con la plataforma Netuno preinstalada.

Paquete del código​

Como es estándar en Java, el código debe tener siempre un package.

Su package debe registrarse en el archivo de configuración global de Netuno:

  • netuno/config.js

Añada al final el siguiente código:

config.packagesScan.add("mi.proyecto.java")

Si su paquete no se añade a la configuración de esta forma, su proyecto nunca se cargará, ya que Netuno solo busca recursos y servicios en los paquetes añadidos previamente.

Una alternativa para evitar registrar el paquete en la configuración es utilizar paquetes Java que empiezan por org.netuno.

Netuno busca automáticamente recursos y servicios que estén en paquetes que empiecen por org.netuno.

Se recomienda utilizar el prefijo: org.netuno.addon

Por ejemplo, podemos utilizar: org.netuno.addon.calculadora

El prefijo de paquete org.netuno.addon distingue que es una funcionalidad añadida externamente y que no forma parte de Netuno en sí.

Por lo tanto, todo su código Java que se integra con Netuno debe definirse y construirse en:

  • org.netuno.addon.mi.proyecto

Después de org.netuno.addon, añada la identificación de su proyecto.

Configuración del POM​

Netuno tiene muchas dependencias en formato JAR, por lo que es necesario definir esas dependencias dentro del POM. Como el POM no admite incluir una carpeta completa y escribir cada dependencia sería laborioso y tedioso, haremos un script en JavaScript para generar el POM.

Preliminares​

Cree la carpeta de su proyecto, donde se escribirán las clases Java. Para nuestro ejemplo vamos a utilizar Calculadora:

mkdir Calculadora

Cree el archivo generar-pom.js. Dentro de ese archivo, vamos a empezar definiendo algunas variables que se usarán a lo largo del script. DIR_NETUNO debe ser la carpeta raíz donde tiene Netuno instalado. DIR_PROYECTO es el directorio donde va a escribir sus clases de recursos y servicios globales. Y PAQUETE debe ser igual al nombre del paquete tal como se definió en los pasos anteriores. Seleccione también la versión de Java con VERSION_JAVA. Las rutas deben ser rutas absolutas:

const DIR_NETUNO = '/ruta/raíz/de/netuno';
const DIR_PROYECTO = '/Proyectos/Netuno/Calculadora';
const PAQUETE = 'org.netuno.addon.calculadora';
const VERSION_JAVA = 25;

Ahora vamos a inicializar la estructura base del pom.xml:

const arrayPaquete = PAQUETE.split(".");
const ID_ARTEFACTO = arrayPaquete.slice(-1);
const ID_GRUPO = arrayPaquete.slice(0, arrayPaquete.length - 1).join(".");

let contenidoPom = `
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>${ID_GRUPO}</groupId>
<artifactId>${ID_ARTEFACTO}</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
<maven.compiler.source>${VERSION_JAVA}</maven.compiler.source>
<maven.compiler.target>${VERSION_JAVA}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
`;

Dependencias​

Después, vamos a crear la función que escanea los directorios y genera una etiqueta <dependency> para cada archivo JAR de dependencia de Netuno:

function mapearDirectorio(carpeta, sufijoGrupo) {
let xmlDependencias = '';
try {
const archivos = readdirSync(carpeta);
for (const archivo of archivos) {
const rutaCompleta = join(carpeta, archivo);
if (statSync(rutaCompleta).isFile() && extname(archivo) === '.jar') {
const nombreBase = basename(archivo, '.jar');
xmlDependencias += `
<dependency>
<groupId>org.netuno.${sufijoGrupo}</groupId>
<artifactId>${nombreBase}</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${rutaCompleta}</systemPath>
</dependency>`;
}
}
} catch (error) {
console.error(`Error al leer el directorio ${carpeta}:`, error.message);
}
return xmlDependencias;
}

Vamos a usar esta función para mapear los dos directorios de dependencias:

const dependenciasCore = mapearDirectorio(join(DIR_NETUNO, 'core', 'lib'), 'core');
const dependenciasWeb = mapearDirectorio(join(DIR_NETUNO, 'core', 'web', 'WEB-INF', 'lib'), 'web');

E inyectar las dependencias en el POM, junto con netuno.jar:

contenidoPom += `
<dependencies>
<dependency>
<groupId>org.netuno</groupId>
<artifactId>netuno-root</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${DIR_NETUNO}/netuno.jar</systemPath>
</dependency>
${dependenciasCore}
${dependenciasWeb}
</dependencies>
`;

Archivo JAR​

Necesitamos definir el directorio de destino para los archivos JAR. Este paso es necesario para tener la opción de compilar nuestro proyecto en un archivo JAR:

contenidoPom += `
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.2</version>
<configuration>
<outputDirectory>${DIR_NETUNO}/lib</outputDirectory>
</configuration>
</plugin>
`;

Limpieza​

Ahora necesitamos configurar Maven para que el comando mvn clean elimine los archivos correctos cuando se invoque:

const RUTA_PAQUETE = PAQUETE.replaceAll(".", "/");
contenidoPom += `
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<filesets>
<fileset>
<directory>${DIR_NETUNO}/lib</directory>
<includes>
<include>${ID_ARTEFACTO}-*.jar</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
<fileset>
<directory>${DIR_NETUNO}/core/web/WEB-INF/classes</directory>
<includes>
<include>${RUTA_PAQUETE}/**</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins>
</build>
`;

Perfil​

Para poder elegir entre compilar el proyecto generando archivos .class o generar archivos .jar, necesitamos crear un perfil diferente y configurar el compilador con la ruta correcta. Y así finalizamos el contenido del POM:

contenidoPom += `
<profiles>
<profile>
<id>dev</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<outputDirectory>${DIR_NETUNO}/core/web/WEB-INF/classes</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>`;

Finalización​

Por último, vamos a escribir el resultado en el archivo pom.xml:

try {
writeFileSync(`${DIR_PROYECTO}/pom.xml`, contenidoPom.trim() + '\n', 'utf8');
console.log(`Configuración completada. El archivo pom.xml se ha actualizado en: ${DIR_PROYECTO}/pom.xml`);
} catch (error) {
console.error("Error al escribir pom.xml:", error);
}

Para generar el POM, ejecute este comando en la carpeta raíz de su proyecto:

bun generar-pom.js

Puede ver el script de generación del POM completo en este enlace.

Compilación​

Ahora puede compilar su proyecto con:

mvn clean compile -Pdev

O bien generar archivos JAR, lo que facilita la distribución del código a otras instancias de Netuno que están en otros ordenadores, con:

mvn clean package

Para limpiar los archivos generados por los comandos compile y package:

mvn clean

Publicar archivo JAR​

El archivo JAR creado se puede distribuir y colocar en cualquier otra plataforma de Netuno.

En cualquier plataforma de Netuno instalada, este JAR debe colocarse en la carpeta lib en la raíz de Netuno:

  • netuno/lib

Tenga en cuenta que esta carpeta no existe por defecto, por lo que puede ser necesario crearla.

Todos los JAR que se encuentran en esa carpeta se cargan automáticamente en la plataforma de Netuno.

Ejecución​

Para ejecutar el proyecto, inicie Netuno normalmente:

./netuno server app=calculadora

La aplicación debe crearse antes con el comando: ./netuno app.

Conclusión​

Se ha visto cómo crear un nuevo proyecto Java para añadir nuevos comportamientos en el núcleo de Netuno.

También hemos visto las buenas prácticas para generar el archivo JAR y cómo distribuirlo en la carpeta netuno/lib.

Todas las técnicas y bibliotecas de programación Java pueden utilizarse para crear cualquier tipo de funcionalidad en Netuno.

Especialmente crear recursos de programación low-code que quedan disponibles para todos los lenguajes de script admitidos, como:

  • JavaScript
  • Python
  • Ruby
  • Kotlin
  • Groovy

En los siguientes tutoriales, vea cómo crear su primer recurso de programación low-code.

Y también cómo crear su primer servicio web multiaplicación, disponible en todas las aplicaciones que están configuradas en Netuno.