Newsgroup: it.comp.java
Titolo: Installazione classi, ecc...

Salve a tutti.
Spesso mi trovo in una situazione che non so gestire, proprio perchè 
sono nuovo e vorrei imparare.
Ad esempio: se volessi utilizzare delle API tipo Apache OpenJPA oppure 
iReport, ecc., dovrei copiarmi il solo file .jar all'interno di 
C:\Programmi\Java\jdk1.6.0_06\jre\lib\ext oppure esiste un sistema più 
"furbo" e funzionale? Come si usa fare di solito?
Chiedo questo anche perchè all'interno di queste API sono presenti delle 
cartelle con documentazione (docs), esempi ed altro.
Attendo Vs. "lumi".

 "furbo" e funzionale? Come si usa fare di solito?
si usa fare che le librerie accessorie stanno sotto una directory lib
del tuo applicativo (ma potrebbero stare in qualsiasi altra posizione)
e sia quando lanci il compilatore che il runtime imposti il cosiddetto
"classpath", comprendente l'elenco delle librerie utilizzate dal tuo
programma.

 programma.
Allora estendo la domanda: se volessi utilizzare tale librerie anche per 
altre applicazioni, non diventerebbe un po' scomodo (e dispendioso a 
livello di spazio) copiare ogni volta tutta la cartella della classe 
all'interno di un progetto?

 all'interno di un progetto?
veramente trovo assai più scomodo gestire queste librerie come shared
resources.

rootkit ha scritto:

Altra domanda (poi giuro non rompo più): dovendo poi redistribuire un 
software, come si fa poi a fare in modo che tali librerie siano presenti?
Es. pratico:
Creo una cartella c:\librerie dove all'interno copio quelle che mi 
servono attraverso questa struttura:
C:\Librerie\apache-openjpa-1.1.0\
C:\Librerie\iReports\
Quando compilo un progetto (che ad es. si trova in 
C:\Documenti\Progetto\Pippo\) come dovrei fare? Inoltre, redistribuendo 
l'applicazione devo copiare la stessa struttura sul pc dove sarà 
install. l'applicativo?
Ti chiedo scusa per le domande molto banali, ma come ripeto vorrei sare 
una cosa un po' come si deve e chiedo quindi info a chi queste cose le 
conosce MOLTO meglio di me.
Grazie!


Non č scomodo, le librerie non sono cosě grandi.
Se poi hai un'applicazione che dipende dalla libreria foobar versione 
1.0 e un'altra che dipende sempre da foobar ma versione 2.0 non te la 
cavi piu'.
-- 
Andrea Francia
http://www.andreafrancia.it/

 install. l'applicativo?
Innanzitutto meglio se ci dici se e quale IDE stai utilizzando.
Eclipse?
Per applicazioni standalone puoi anche creare un JAR unico che
contiene la tua applicazione e tutti i JAR da cui dipende (non proprio
tutti in quanto quelli gia' presenti nella JRE non serve
aggiungerli..anzi non farlo proprio).
A questo proposito Eclipse ha un plugin chiamato FatJar. Dacci un
occhio se usi quel IDE.
Oppure puoi anche distribuire separatamente il JAR della tua
applicazione e quelli da cui dipende. Poi se usi java.exe per eseguire
devi specificare (tramite l'argomento cp) il classpath di runtime.
Il primo approccio e' piu' semplice da eseguire, il secondo
leggermente piu' modulare.

cicap ha scritto:

Ciao e grazie anche a te per i suggerimenti.
Come IDE sto utilizzando NetBeans 6.1 ed ho visto che si possono 
importare le librerie in vari modi differenti. Quello che vorrei però è 
creare uno "standard", ovvero cercare di importare le classi in modo 
modulare e che possa distribuire l'applicazione senz particolari problemi.
Nel caso specifico di iReport ho istallato addirittura il plugin di 
NetBeans dove integra un po' tutto, ma ai fini pratici però non ho mai 
distrubuito nulla quindi non so come converrebbe fare.


Distribuire con netbeans è semplice: dopo aver fatto build all vai a 
prendere il contenuto della cartella dist e lo copi sulla macchina target.
La cartella dist di solito contiene due cose:
  - una cartella lib piena di tutti i jar che la tua applicazione usa
  - il jar della tua applicazione.
Dentro il MANIFEST del jar della tua applicazione c'e' già un bel 
classpath che fa riferimento alla cartella lib nella directory che 
contiene il jar.



Ma se ti ho appena detto come fare: devi distribuire i JAR.
Esempio. Hai una classe "xtreme.HelloWorld" che usa IReport.
Una volta compilata hai un .class: HelloWorl.class dentro la cartella
xtreme.
Opzione 1: crei un unico JAR che contiene la seguente struttura:
/xtreme/HelloWorld
/org/ireport/...   <--- ho sparato a caso non conosco la struttura dei
package di IReport.
Come vedi questo JAR ingloba al suo interno sia la tua classe che le
classi di IReport. Hai in sostanza fuso i JAR di IReport nel tuo JAR:
hai un jar unico facilmente distribuile ed eseguibile:
java -jar tuoapplicazione.jar
NetBeans sicuramente sapra' aiutarti nella creazione di questo grande
JAR. Io uso Eclipse e ti ho dato un suggerimento per Eclipse, guarda
te per NetBeans.
Opzione 2: crei tanti JAR:
-tuaapplicazione.jar che contiene HelloWorld.class.
-IReport.jar
-altri JAR necessari.
E distribuisci tutto insieme. Per eseguire devi fare (se non ricordo
male ;))
java -cp <lista di jar>   -jar tuaapplicazione.jar
C'e' anche il discrosso del MANIFEST: devi aggiungere la main-class.
Per ulteriori info vai qua 
http://java.sun.com/docs/books/tutorial/jar/

x-treme ha scritto:

Io ho rinunciato a provare a gestire le dipendenze a mano...e lascio 
fare a Maven...e sono felice.
-- 
Lucio Benfante
JUG Padova           
http://www.parancoe.org
 ...have a look at it!
www.jugpadova.it
 
http://www.jugevents.org


A parte quando non le trovi sui repository ;)

x-treme ha scritto:
[...]
Ok, direi che tutti quanti mi avete dato un sacco di utilissime 
informazioni. Adesso vedo di "spippolare" a dovere.
Grazie ancora!

cicap ha scritto:

Succede...raramente (per le cose comuni)...ma succede :)
Per quello bisogna attrezzarsi con un repository interno. E comunque, se 
si sviluppa da soli, non è troppo difficile installare nel proprio 
repository locale ciò che non c'è nei repository pubblici.
In ogni caso il vantaggio di non doversi gestire le dipendenze a mano è 
impagabile.


 
Pure io e lo preferisco enormemente ad Ant. Unica cosa: il plugin di 
Eclipse non mi sembra all'altezza...ed infatti Maven lo uso solo da 
linea di comando.

cicap ha scritto:

bah io non lo trovo affatto malvagio.
un difetto, per navigare i repository in cerca delle dipendenze vuole 
averlo indicizzato, e per alcuni repository che definisco nel file pom 
di progetto non c'è verso di farlo. quindi mi tocca andare a cercarle a 
mano col browser e aggiungerle a mano.
per il resto, ti fai i profili di lancio con i goal desiderati e poi 
esegui comodamente.
-- 
? Fino all'anno scorso avevo un solo difetto. Ero presuntuoso.
http://softvalley.blogspot.com
http://www.flickr.com/photos/marko_po/

cicap ha scritto:

Sarà 4-5 mesi che non lo provo con Eclipse. Decisamente non era 
all'altezza...ma non mi riguarda, dato che di solito uso NetBeans, e i 
progetti Maven li tratta come i progetti nativi.


 
ah, addio Eclipse, passo a NetBeans (il prossimo anno tanto torno...)!
Per curiosita'...qualcuno sta facendo integration test usando cargo come 
plugin di maven?