Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
Ciao,
Ho risolto impostando la scope della libreria dentro al pom a provided
codice:<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.7.5</version> <scope>provided</scope> <!-- QUI --> </dependency>
In questo modo la libreria NON viene aggiunta nella cartella ...\WEB-INF\lib
Poi ho copiato manualmente la libreria nella cartella c:\\tomcat-10.1.40\lib
Riavviato il tutto e sembra funzionare.
Grazie per l'interesse.
Non è comunque la soluzione corretta/sensata. Non dovresti mettere jar nella lib di Tomcat se non ci sono motivi ben precisi (perché quelli messi lì diventano "globali" per tutte le webapp).
Tra l'altro non avrebbe nemmeno molto senso usare Maven se poi tanto devi andare a copiare a manina le dipendenze altrove.
Piuttosto mi viene un dubbio .. un sospetto più che altro. Come stai facendo il build/deploy della webapp? Da un IDE? Da prompt? E soprattutto, cosa hai messo come <packaging> nel pom.xml ?
Perché se hai messo <packaging>jar</packaging> o non l'hai messo proprio (che equivale a specificare jar), allora questo è il problema ed errore.
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
Non è comunque la soluzione corretta/sensata. Non dovresti mettere jar nella lib di Tomcat se non ci sono motivi ben precisi (perché quelli messi lì diventano "globali" per tutte le webapp).
Tra l'altro non avrebbe nemmeno molto senso usare Maven se poi tanto devi andare a copiare a manina le dipendenze altrove.
Piuttosto mi viene un dubbio .. un sospetto più che altro. Come stai facendo il build/deploy della webapp? Da un IDE? Da prompt? E soprattutto, cosa hai messo come <packaging> nel pom.xml ?
Perché se hai messo <packaging>jar</packaging> o non l'hai messo proprio (che equivale a specificare jar), allora questo è il problema ed errore.
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
Buongiorno,
Uso IntelliJ come ide, e questo è il mio pom
Si sono a conoscenza che le librerie mese nella cartella tomcat/lib sono "shared" con tutte le applicazioni caricate sul server.codice:<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>sfm</groupId> <artifactId>sfm</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>sfm Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.bundles/jaxrs-ri --> <dependency> <groupId>org.glassfish.jersey.bundles</groupId> <artifactId>jaxrs-ri</artifactId> <version>3.1.10</version> </dependency> <!-- https://mvnrepository.com/artifact/jakarta.platform/jakarta.jakartaee-web-api --> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-web-api</artifactId> <version>11.0.0</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.7.5</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>4.0.5</version> </dependency> </dependencies> <build> <finalName>sfm</finalName> </build> </project>
Condivido sul fatto di utilizzare maven e poi andare a posizionare manualmente la libreria non è "sensato". Anche se spero che sia un caso isolato questo di tomcat.
Resto in tua attesa. Grazie
Ok, il pom in effetti è corretto.
Lo scope provided è ok per jakarta.jakartaee-web-api. Tira dentro molte cose (è una dipendenza di "piattaforma" intera) ma sono tutte provided, quindi usate solo in compilazione.
Per il postgresql invece lo scope provided è scorretto. Se proprio vuoi mettere lo scope, al massimo dovrebbe essere <scope>runtime</scope> che ha anche più senso (i driver JDBC di norma non servono in compilazione ma solo a runtime).
Pertanto, fai questa correzione (e togli il jar dalla c:\tomcat-10.1.40\lib !). Quindi lancia un mvn package (da prompt o l'equivalente da IDE). Ti crea il war e se ci guardi dentro, dovresti trovare la WEB-INF/lib/ con svariati jar, tra cui anche il postgresql-42.7.5.jar.
Se c'è e fai il deploy del war, funziona? Se sì, stop, il problema non c'è o perlmeno non è a questi livelli ma forse altrove.
L'unica cosa che non hai descritto bene è come fai il deploy. Dall'IDE? Se ben ricordo (ed è ancora così), l'IntelliJ community non ha il supporto nativo di Tomcat mentre quello commerciale ha già tutte le integrazioni per i server.
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
Ciao, domani farò una prova, ma il problema è proprio quando la libreria la mette dentro WEB-INF/lib/. Quando la libreria di postgresql è qui dentro non viene caricata/registrata. mentre le la sposto dentro tomcat/lib, viene correttamente caricata/registrata e alla chiusura dell'app viene deregistrata correttamente.
Per il deploy, con intellj creo il file war, poi lo carico con tomcat ed eseguo il deploy dalla schermata manager di tomcat.