Passa al contenuto principale

Configurazione del Progetto con Apache Maven

Prerequisiti​

In questo esempio utilizzeremo Apache Maven, quindi clicca sul link precedente per ottenere informazioni su come installarlo.

Dovrai avere installato anche Java.

Installa la piattaforma Netuno. Il progetto in Java sarà integrato con la piattaforma Netuno preinstallata.

Pacchetto del Codice​

Come è standard in Java, il codice deve avere sempre un package.

Il tuo package deve essere registrato nel file di configurazione globale di Netuno:

  • netuno/config.js

Aggiungi alla fine il seguente codice:

config.packagesScan.add("mio.progetto.java")

Se il tuo pacchetto non viene aggiunto alla configurazione in questo modo, il tuo progetto non verrà mai caricato, poiché Netuno cerca risorse e servizi solo nei pacchetti aggiunti in precedenza.

Un'alternativa per evitare di registrare il pacchetto nella configurazione è utilizzare pacchetti Java che iniziano con org.netuno.

Netuno cerca automaticamente risorse e servizi che si trovano in pacchetti che iniziano con org.netuno.

È consigliato utilizzare il prefisso: org.netuno.addon

Ad esempio, possiamo utilizzare: org.netuno.addon.calcolo

Il prefisso di pacchetto org.netuno.addon indica che si tratta di una funzionalità aggiunta esternamente e che non fa parte di Netuno stesso.

Pertanto, tutto il tuo codice Java che si integra con Netuno deve essere definito e compilato in:

  • org.netuno.addon.mio.progetto

Dopo org.netuno.addon aggiungi l'identificazione del tuo progetto.

Configurazione del POM​

Netuno ha molte dipendenze in formato JAR, quindi è necessario definirle all'interno del POM. Poiché il POM non supporta l'inclusione di un'intera cartella e scrivere ogni dipendenza sarebbe laborioso e noioso, creeremo uno script in JavaScript per generare il POM.

Preliminari​

Crea la cartella del tuo progetto, dove verranno scritte le classi Java. Per il nostro esempio utilizzeremo Calcolo:

mkdir Calcolo

Crea il file genera-pom.js. All'interno di questo file, inizieremo definendo alcune variabili che saranno utilizzate nel corso dello script. DIR_NETUNO deve essere la cartella radice in cui hai installato Netuno. DIR_PROGETTO è la directory in cui scriverai le tue classi di risorse e servizi globali. E PACCHETTO deve essere uguale al nome del pacchetto come definito nei passaggi precedenti. Seleziona anche la versione di Java con VERSIONE_JAVA. I percorsi devono essere percorsi assoluti:

const DIR_NETUNO = '/percorso/radice/di/netuno';
const DIR_PROGETTO = '/Progetti/Netuno/Calcolo';
const PACCHETTO = 'org.netuno.addon.calcolo';
const VERSIONE_JAVA = 25;

Ora inizializziamo la struttura di base del pom.xml:

const arrayPacchetto = PACCHETTO.split(".");
const ID_ARTEFATTO = arrayPacchetto.slice(-1);
const ID_GRUPPO = arrayPacchetto.slice(0, arrayPacchetto.length - 1).join(".");

let contenutoPom = `
<?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_GRUPPO}</groupId>
<artifactId>${ID_ARTEFATTO}</artifactId>
<version>1.0-SNAPSHOT</version>

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

Dipendenze​

Poi creeremo la funzione che analizza le directory e genera un tag <dependency> per ogni file JAR di dipendenza di Netuno:

function mappaDirectory(cartella, suffissoGruppo) {
let xmlDipendenze = '';
try {
const elencoFile = readdirSync(cartella);
for (const file of elencoFile) {
const percorsoCompleto = join(cartella, file);
if (statSync(percorsoCompleto).isFile() && extname(file) === '.jar') {
const nomeBase = basename(file, '.jar');
xmlDipendenze += `
<dependency>
<groupId>org.netuno.${suffissoGruppo}</groupId>
<artifactId>${nomeBase}</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${percorsoCompleto}</systemPath>
</dependency>`;
}
}
} catch (errore) {
console.error(`Errore durante la lettura della directory ${cartella}:`, errore.message);
}
return xmlDipendenze;
}

Utilizzeremo questa funzione per mappare le due directory di dipendenze:

const dipendenzeCore = mappaDirectory(join(DIR_NETUNO, 'core', 'lib'), 'core');
const dipendenzeWeb = mappaDirectory(join(DIR_NETUNO, 'core', 'web', 'WEB-INF', 'lib'), 'web');

E inserire le dipendenze nel POM, insieme a netuno.jar:

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

File JAR​

Dobbiamo definire la directory di destinazione per i file JAR. Questo passaggio è necessario per avere l'opzione di compilare il nostro progetto in un file JAR:

contenutoPom += `
<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>
`;

Pulizia​

Ora dobbiamo configurare Maven affinché il comando mvn clean elimini i file corretti quando viene invocato:

const PERCORSO_PACCHETTO = PACCHETTO.replaceAll(".", "/");
contenutoPom += `
<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_ARTEFATTO}-*.jar</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
<fileset>
<directory>${DIR_NETUNO}/core/web/WEB-INF/classes</directory>
<includes>
<include>${PERCORSO_PACCHETTO}/**</include>
</includes>
<followSymlinks>false</followSymlinks>
</fileset>
</filesets>
</configuration>
</plugin>
</plugins>
</build>
`;

Profilo​

Per poter scegliere tra compilare il progetto generando file .class o generare file .jar, dobbiamo creare un profilo diverso e configurare il compilatore con il percorso corretto. E così terminiamo il contenuto del POM:

contenutoPom += `
<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>`;

Finalizzazione​

Infine, scriviamo il risultato nel file pom.xml:

try {
writeFileSync(`${DIR_PROGETTO}/pom.xml`, contenutoPom.trim() + '\n', 'utf8');
console.log(`Configurazione completata. Il file pom.xml è stato aggiornato in: ${DIR_PROGETTO}/pom.xml`);
} catch (errore) {
console.error("Errore durante la scrittura di pom.xml:", errore);
}

Per generare il POM, esegui questo comando nella cartella radice del tuo progetto:

bun genera-pom.js

Puoi vedere lo script completo di generazione del POM in questo link.

Compilazione​

Ora puoi compilare il tuo progetto con:

mvn clean compile -Pdev

Oppure generare file JAR, il che facilita la distribuzione del codice ad altre istanze di Netuno che si trovano su altri computer, con:

mvn clean package

Per pulire i file generati dai comandi compile e package:

mvn clean

Pubblicare il File JAR​

Il file JAR creato può essere distribuito e inserito in qualsiasi altra piattaforma Netuno.

In qualsiasi piattaforma Netuno installata, questo JAR deve essere inserito nella cartella lib nella radice di Netuno:

  • netuno/lib

Nota che questa cartella non esiste per impostazione predefinita, quindi potrebbe essere necessario crearla.

Tutti i JAR che si trovano in questa cartella vengono caricati automaticamente nella piattaforma Netuno.

Esecuzione​

Per eseguire il progetto, avvia Netuno normalmente:

./netuno server app=calcolo

L'app deve essere creata prima con il comando: ./netuno app.

Conclusione​

Abbiamo visto come creare un nuovo progetto Java per aggiungere nuovi comportamenti al nucleo di Netuno.

Abbiamo anche visto le buone pratiche per generare il file JAR e come distribuirlo nella cartella netuno/lib.

Tutte le tecniche e le librerie di programmazione Java possono essere utilizzate per creare qualsiasi tipo di funzionalità in Netuno.

In particolare, creare risorse di programmazione low-code che rimangono disponibili per tutti i linguaggi di scripting supportati, come:

  • JavaScript
  • Python
  • Ruby
  • Kotlin
  • Groovy

Nei tutorial successivi, scopri come creare la tua prima risorsa di programmazione low-code.

E anche come creare il tuo primo servizio web multi-applicazione, disponibile in tutte le applicazioni configurate in Netuno.