Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Incorporare libreria JAR

    Ciao a tutti, sono nuovo in Java, spero di non fare domande troppo idiote..

    Con l'aiuto di Google ho scritto una Classe che preleva i dati da un database MySql che ovviamente per funzionare ha bisogno della libreria JAR Connection/J.

    All'interno di Eclipse funziona tutto bene, ma se eseguo la Classe dal Prompt dei Comandi di Windows mi da errore perché giustamente non trova la libreria.

    Se copio la libreria in C:\Program Files\Java\jre1.8.0_72\lib\ext non ho problemi e funziona davvero tutto a dovere, ma vorrei incorporare la libreria insieme alla Classe così da avere un pacchetto singolo.. E' possibile?

    Al momento ho solo importato la libreria in Eclipse seguendo questi passaggi:
    1) all'interno del progetto ho creato una cartella chiamata "lib"
    2) al suo interno ho copiato la libreria JAR
    3) tasto dx sul progetto > build path > configure build path
    4) nel tab Libraries > Add JARs e caricato il tutto

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da magic_key Visualizza il messaggio
    Se copio la libreria in C:\Program Files\Java\jre1.8.0_72\lib\ext non ho problemi e funziona davvero tutto a dovere
    Sì, come semplice prova va bene. Usare la lib/ext però, in generale, ha dei limiti. Innanzitutto è "globale" per tutte le applicazioni che sono avviate con quello specifico JRE e se due applicazioni avessero bisogno di versioni differenti della stessa libreria, queste non puoi metterle entrambe nella lib/ext. Tra l'altro non c'è nemmeno un ordine di ricerca "garantito", quindi non sapresti a priori quale versione della libreria viene pescata per prima.
    Inoltre le classi in jar in lib/ext vengono caricate con un classloader speciale che non "sa" nulla dello user classpath e quindi non va bene per tutte le librerie.
    Pertanto, salvo casi particolari, la lib/ext non è poi così utile.

    Quote Originariamente inviata da magic_key Visualizza il messaggio
    ma vorrei incorporare la libreria insieme alla Classe così da avere un pacchetto singolo.. E' possibile?
    I jar tecnicamente sono degli zip, quindi è tecnicamente possibile fondere insieme il contenuto di più jar a patto che non ci siano doppioni di classi/risorse. C'è il problema del "manifest" che in ogni jar è in un path fisso e ben preciso. Fare un "merge" di più manifest potrebbe non essere così semplice.

    Inoltre il fornitore di una libreria potrebbe indicare nella licenza d'uso la richiesta/obbligo di non incorporare il suo jar in un altro.

    Quindi in generale, anche questa opzione sarebbe da evitare.

    Quote Originariamente inviata da magic_key Visualizza il messaggio
    Al momento ho solo importato la libreria in Eclipse seguendo questi passaggi:
    1) all'interno del progetto ho creato una cartella chiamata "lib"
    2) al suo interno ho copiato la libreria JAR
    3) tasto dx sul progetto > build path > configure build path
    4) nel tab Libraries > Add JARs e caricato il tutto
    E questo va bene finché sei nel IDE.

    Se vuoi avviare la tua applicazione con:

    java -jar myapp.jar

    allora c'è un solo modo pulito per far sì che myapp.jar referenzi altre librerie, ovvero elencarle nell'attributo Class-Path nel manifest del tuo jar.

    Quindi in sostanza avere nel MANIFEST.MF del tuo jar qualcosa tipo:

    Class-Path: lib/nome1.jar lib/nome2.jar

    Questo lo puoi fare a mano con il tool "jar" oppure con i tool di build es. Apache Ant.

    Chiaramente poi ovunque ci sia il myapp.jar ci deve essere una cartella "lib" con dentro le librerie. Insomma la relazione tra i jar deve restare "relativa" in quel senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie mille x le ottime info! Ho provato a creare un file JAR eseguibile dal Prompt dei Comandi con java -jar myapp.jar; ho notato che Eclipse fa tutto in automatico creando anche il MANIFEST.MF al suo interno. Tutto fila liscio.

    Se posso permettermi una domanda off-topic: nel mio test di collegamento al database MySql ho dovuto specificare username e password all'interno della Classe principale. Ho dato in pasto la Classe "criptata" ad un decompilatore che tra le altre cose ha rivelato anche questi dati sensibili. Normalmente con Java qual'è l'usanza per proteggere questi dati sensibili?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da magic_key Visualizza il messaggio
    Ho dato in pasto la Classe "criptata" ad un decompilatore che tra le altre cose ha rivelato anche questi dati sensibili.
    Non è nemmeno necessario arrivare ai "decompilatori" .. bastava un disassemblatore, il tool 'javap' del JDK. Ma addirittura basta una utility di hex-viewer/editor per leggere tutte le stringhe che sono presenti in un .class! (le stringhe sono memorizzate nei .class in un UTF-8 "modificato" ma perlomeno per i caratteri ASCII sono perfettamente leggibili)

    Quote Originariamente inviata da magic_key Visualizza il messaggio
    Normalmente con Java qual'è l'usanza per proteggere questi dati sensibili?
    Puoi chiederli all'utente ad ogni avvio della applicazione. Ma se non è possibile e/o non pratico, allora ad esempio salvarli da qualche parte sul file-system (magari in una locazione non proprio palese ed evidente), in forma criptata usando le API della Security di Java, con un algoritmo a chiave simmetrica dove la chiave potrebbe essere determinata o da una password/passphrase (chiesta in input) o derivata da caratteristiche sw/hw del sistema.

    Ovviamente la sicurezza assoluta non esiste ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    se non è possibile e/o non pratico, allora ad esempio salvarli da qualche parte sul file-system (magari in una locazione non proprio palese ed evidente), in forma criptata usando le API della Security di Java, con un algoritmo a chiave simmetrica dove la chiave potrebbe essere determinata o da una password/passphrase (chiesta in input) o derivata da caratteristiche sw/hw del sistema.
    Non mi riferisco ad un sistema di login, bensì all username e password miei per accedere al mio database MySql. L'accesso al programma JAVA è libero, ma per prelevare le informazioni dal database occorre specificare questi user e pass e non vorrei che finiscano in mani poco affidabili...

    Comunque forse sbaglio il concetto: invece di prelevare i dati dal database direttamente, converrebbe più inviare una richiesta al database tramite Ajax/PHP, in modo che questi dati di accesso al db restano sul server..

    mmh devo studiarmela

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.