<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/it/java.xml,v 1.18 2012/11/05 17:35:29 ago Exp $ -->

<guide lang="it">
<title>Guida a Java in Gentoo</title>

<author title="Autore">
  <mail link="nichoj@gentoo.org">Joshua Nichols</mail>
</author>
<author title="Autore">
  <mail link="karltk@gentoo.org">Karl Trygve Kalleberg</mail>
</author>
<author title="Redazione">
  <mail link="nightmorph@gentoo.org">Joshua Saddler</mail>
</author>
<author title="Traduzione">
  <mail link="cristian.iannuzzi@gmail.com">Cristian Iannuzzi</mail>
</author>
<author title="Traduzione">
  <mail link="scen"/>
</author>

<abstract>
Questa guida è un'introduzione a Java e spiega come usare Java con Gentoo Linux.
</abstract>

<!-- The content of this document is licensed under the CC-BY-SA license -->
<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
<license/>

<version>5</version>
<date>2012-07-24</date>

<chapter>
<title>Cos'è Java?</title>
<section>
<title>Panoramica</title>
<body>

<p>
Java è un linguaggio di programmazione sviluppato dagli ingegneri della Sun
Microsystem. Questo linguaggio è orientato agli oggetti e progettato per girare
su diverse architetture senza la necessità di essere ricompilato. Sebbene Java
possa essere compilato come un programma nativo, gran parte della sua popolarità
è dovuta sicuramente alla sua portabilità oltre che alla presenza di alcune
caratteristiche particolari come il garbage collector. Per rendere possibile
l'indipendenza dall'architettura, il compilatore Java compila il codice java in
un'interpretazione intermedia chiamata "java bytecode" che viene eseguita in una
JRE (Java Runtime Environment - ndT "Ambiente di Esecuzione Java") e non
direttamente  nel sistema operativo.
</p>

<p>
Per eseguire il bytecode Java è necessario avere installato un JRE (Java
Runtime Environment) che fornisce le librerie di base, una Java Virtual Machine
dipendente dall'architettura, i plug-in per i browser ed altre funzionalità. Per
avere un ambiente di programmazione Java bisogna installare un JDK (Java
Development Kit) che comprende un compilatore bytecode ed un debugger.
</p>

</body>
</section>
</chapter>

<chapter>
<title>Installazione della Macchina Virtuale</title>
<section>
<title>Le scelte</title>
<body>

<p>
Gentoo offre diverse possibilità per ambienti JRE e JDK. Tra le alternative
troviamo:
</p>

<table>
<tr>
  <th>Produttore</th>
  <th>JDK</th>
  <th>JRE</th>
</tr><tr>
  <ti>IcedTea Open Java SE (icedtea6-bin)</ti>
  <ti>dev-java/icedtea-bin</ti>
  <ti />
</tr>
<tr>
  <ti>Oracle Java 7 SE</ti>
  <ti>dev-java/oracle-jdk-bin</ti>
  <ti>dev-java/oracle-jre-bin</ti>
</tr>
<tr>
  <ti>Java di Sun 6</ti>
  <ti>dev-java/sun-jdk</ti>
  <ti>dev-java/sun-jre-bin</ti>
</tr>
<tr>
  <ti>IBM JAVA</ti>
  <ti>dev-java/ibm-jdk-bin</ti>
  <ti>dev-java/ibm-jre-bin</ti>
</tr>
</table>

<!--
TODO: list free implementations?
note about not drop-in replacements
kaffe/sablevm/gcj/jamvm
-->

</body>
</section>
<section>
<title>Installare JRE/JDK</title>
<body>

<p>
Per installare la versione predefinita della JDK , eseguire <c>emerge
virtual/jdk</c>. Oppure per installare la versione predefinita della JRE,
eseguire <c>emerge virtual/jre</c>.
</p>

<p>
Alcune JDK e JRE, compreso il pacchetto Sun, richiedono di accettare una licenza
per l'utente finale, o EULA (NdT, in inglese, End User License Agreement). Se
questa licenza (ad esempio dlj-1.1) non è elencata in ACCEPT_LICENSE in
<path>/etc/portage/make.conf</path>, allora non si potrà installare JDK/JRE. Per
ottenere maggiori informazioni su come aggiungere l'accettazione di licenze a
<path>make.conf</path>, leggere il <uri
link="/doc/it/handbook/handbook-x86.xml?part=2&amp;chap=1#doc_chap4">Manuale
Portage</uri>.
</p>

<p>
per evitare le limitazioni di una licenza restrittiva, si consideri di
installare <c>icedtea-bin</c>, che è una implementazione <e>open</e> di Java
del progetto OpenJDK.
</p>

<note>
Il pacchetto JDK include anche la JRE, in modo tale che se si installa
direttamente la JDK non c'è la necessità di installare anche la JRE.
</note>

</body>
</section>
<section>
<title>Installare macchine virtuali con restrizioni nello scaricamento</title>
<body>

<p>
Alcune delle JDK e JRE richiedono diversi passaggi prima di essere installate.
Basta effettuare l'emerge di questi pacchetti come al solito, così facendo gli
ebuild forniranno le istruzioni necessarie per procedere con l'installazione.
</p>

<p>
Bisogna scaricare il (o i) file indicato(i) all'interno di
<path>/usr/portage/distfiles</path>, e rieseguire emerge, a questo punto
l'installazione di JDK/JRE comincerà.
</p>

</body>
</section>
</chapter>

<chapter>
<title>Configurare la propria macchina virtuale</title>
<section>
<title>Panoramica</title>
<body>

<p>
Gentoo permette di avere più JDK e JRE installate contemporaneamente senza
conflitti.
</p>

<p>
Usando lo strumento <c>java-config</c> è possibile impostare globalmente
l'ambiente Java da utilizzare (se si hanno i privilegi di root). Gli utenti
possono utilizzare <c>java-config</c> per configurare la propria impostazione
personale.
</p>

<note>
È anche possibile utilizzare <e>eselect</e> per cambiare la vm di sistema e di
utente. Vedere <c>eselect java-vm help</c>.
</note>

</body>
</section>
<section>
<title>Configurare una macchina virtuale predefinita</title>
<body>

<p>
Eseguendo il comando <c>java-config --list-available-vms</c> viene visualizzata
la lista degli JRE e JDK disponibili sul sistema in uso. Questo è un esempio di
output:
</p>

<pre caption="Lista delle VM disponibili">
# <i>java-config --list-available-vms</i>
The following VMs are available for generation-2:
1)      IcedTea-bin 1.10.4 [icedtea-bin]
2)      Sun JDK 1.5.0.20 [sun-jdk-1.5] <comment>(Build Only)</comment>
*)      Sun JDK 1.6.0.16 [sun-jdk-1.6]
</pre>


<note>
Le VM marcate come "Build Only" potrebbero contenere delle vulnerabilità di
sicurezza e/o essere non più mantenute ed aggiornate. Gentoo raccomanda di non
impostare queste VM sia come VM di sistema che per utente. Si prega di leggere
il paragrafo <uri link="java.xml#build-only">Build Only VM</uri> per ulteriori
informazioni.
</note>

<p>
Il <e> * </e> indica che questa è la vm attualmente in uso ( vm di sistema o
vm utente se configurata). Il nome tra parentesi quadre "[]" è l'identificativo
di quella particolare VM, utilizzabile (in alternativa al numero) in
<c>java-config --set-system-vm</c>. Questo è un esempio di come configurare la
VM di sistema:
</p>

<pre caption="Scelta della VM di sistema">
<comment>(Tramite identificativo (da preferire))</comment>
# <i>java-config --set-system-vm sun-jdk-1.6</i>
Now using sun-jdk-1.6 as your generation-2 system JVM
<comment>(Tramite numero)</comment>
# <i>java-config --set-system-vm 3</i>
Now using sun-jdk-1.6 as your generation-2 system JVM
</pre>

<p>
Come utente normale si può usare <c>java-config --set-user-vm</c>.
</p>

<note>
Non c'è più bisogno di "derivare" (<c>source</c>) il profilo a seguito di
aggiornamenti della VM utente/di sistema.
</note>

</body>
</section>
<section id="build-only">
<title>Build Only VM</title>
<body>

<p>
Alcune macchine virtuali sono marcate come "build-only" poichè stanno per
entrare in una fase di "fine vita" in cui non verranno più aggiornate e
mantenute, e/o perchè contengono delle vulnerabilità di sicurezza. Queste
macchine virtuali non verranno usate automaticamente da Gentoo per l'esecuzione
delle applicazioni attraverso gli strumenti di lancio di Gentoo ma rimaranno
comunque disponibili per l'uso nell'ambiente di compilazione di Gentoo in
quanto alcuni pacchetti potrebbero richiedere il loro uso specifico.
L'impostazione di queste macchine virtuali sia come VM di sistema sia come VM
utente è fortemente scoraggiata, in quanto queste VM successivamente verranno
usate per avviare gli eseguibili <path>/usr/bin/{java,javac,..}</path> e
verranno anche usati da qualsiasi pacchetto che non usa gli script di lancio di
Gentoo.
</p>

</body>
</section>
<section id="preferred-vm">
<title>VM "build" Preferita</title>
<body>

<p>
Durante un emerge dei pacchetti JAVA, la VM usata per la compilazione può essere
a volte può essere differente da quella impostata come VM di sistema.
</p>

<p>
Questa modifica di VM in fase di compilazione è necessaria quando, per esempio,
la propria vm di sistema è una VM 1.6 e il pacchetto che si sta compilando
richiede una VM 1.5. Durante la compilazione verrà selezionata per l'uso una VM
1.5, lasciando intatta la selezione della propria vm di sistema.
</p>

<p>
Per definire quale VM dev'essere selezionata quando è necessario un cambio, è
stato creato un elenco di <e>VM predefinite/supportate</e> per architettura. È
possibile trovare tale elenco in
<path>/usr/share/java-config-2/config/jdk-defaults.conf</path>.
</p>

<p>
Si possono personalizzare queste impostazioni di default (e ovviamente
selezionare la VM di sistema) in <path>/etc/java-config-2/build/jdk.conf</path>
ed avere un controllo completo sulla VM usata per la compilazione. Alcuni
esempi:
</p>

<pre caption="Esempio di /etc/java-config-2/build/jdk.conf">
<comment>(Per utilizzare sempre sun-jdk, es. sun-jdk-1.4 per 1.4, sun-jdk-1.5 per 1.5, ecc.)</comment>
*=sun-jdk
</pre>

<pre caption="Esempio di /etc/java-config-2/build/jdk.conf">
<comment>(Per utilizzare sempre sun-jdk-1.5 dove possibile, tranne quando la 1.4 oppure la 1.3 VM sono richieste esplicitamente)</comment>
*=sun-jdk-1.5
</pre>

<pre caption="Esempio /etc/java-config-2/build/jdk.conf">
<comment># Per 1.3 si preferisce sun-jdk 1.4 ma quando non è disponibile, usare ibm-jdk-bin,
# Per 1.5, usare sun-jdk</comment>
1.3=sun-jdk-1.4 ibm-jdk-bin
1.5=sun-jdk
</pre>

<warn>
Non <e>bisogna</e> modificare questo file. Se queste opzioni vengono modificare
per l'utilizzo di una VM non supportata, le cose potrebbero non funzionare più
correttamente. A causa della grande varietà di VM disponibili, non ci sono le
risorse sufficente per testare e verificare che ogni pacchetto funzioni con
ognuna di esse. I bug inseriti che riportano VM non supportate saranno meno
prioritari di bug presenti con VM supportate.
</warn>

</body>
</section>
</chapter>

<chapter>
<title>Compilatori</title>
<section>
<body>

<p>
Il compilatore standard di Java è <c>javac</c>, disponibile con ogni JDK. Oltre
a configurare la VM usata in fase di compilazione, si può scegliere quale
compilatore utilizzare. Essenzialmente, si può definire una lista preferita di
compilatori da utilizzare, tale scelta va fatta in
<path>/etc/java-config-2/build/compilers.conf</path>.
</p>

<pre caption="/etc/java-config-2/build/compilers.conf">
# Se l'ebuild lo supporta
# esso verificherà la variabile COMPILERS dall'inizio alla fine e
# userà il primo compilatore installato

COMPILERS="ecj-X.Y jikes javac"
</pre>

<p>
Alcuni compilatori non supportano tutti i possibili argomenti -target e -source.
Di conseguenza, ogni compilatore nella lista viene controllato per vedere se può
utilizzare il -source/-target desiderato. javac funziona in ogni caso, per cui
verrà utilizzato nel caso in cui non venga trovato nessun'altro compilatore
adatto.
</p>

<p>
Maggiori informazioni sui compilatori sono riportate di seguito:
</p>

<table>
<tr>
  <th>Nome</th>
  <th>Comando</th>
  <th>Pacchetto</th>
  <th>Descrizione</th>
</tr>
<tr>
  <ti>javac</ti>
  <ti>javac</ti>
  <ti>N/A</ti>
  <ti>
    Questo è il compilatore predefinito, disponibile in ogni JDK.
  </ti>
</tr>
<tr>
  <ti>jikes</ti>
  <ti>jikes</ti>
  <ti>dev-java/jikes</ti>
  <ti>
    Jikes originalmente è stato sviluppato da IBM, è generalmente risulta essere
    più rapido di javac. Tuttavia risulta essere più pedante e in alcuni casi
    avrà dei problemi dove invece javac non ne ha; inoltre non supporta ancora
    la sintassi di Java 1.5.
  </ti>
</tr>
<tr>
  <ti>Compilatore di Eclipse per Java</ti>
  <ti>ecj</ti>
  <ti>=dev-java/eclipse-ecj</ti>
  <ti>
    ECJ è il compilatore usato da Eclipse. È molto completo, veloce e supporta
    la sintassi di Java 1.5.
  </ti>
</tr>
</table>

</body>
</section>
</chapter>

<chapter>
<title>Impostare una CLASSPATH predefinita</title>
<section>
<body>

<warn>
Le opzioni spiegate in questa sezione dovrebbero essere considerate deprecate e
molto probabilmente verranno rimosse in futuro. Si sconsiglia vivamente l'uso di
tali opzioni, perché i propri progetti o applicazioni Java dovrebbero idealmente
utilizzare i propri classpath. Se si sceglie di specificare un CLASSPATH
predefinita, alcune applicazioni potrebbero comportarsi in modo inaspettato, in
quanto trovano nel classpath delle classi non previste.
</warn>

<p>
<c>java-config</c> può essere usato per impostare globalmente una CLASSPATH
predefinita, oppure una CLASSPATH predefinita specifica per utente.
</p>

<p>
Come prima cosa, verificare la lista delle librerie Java installate nel proprio
sistema, per poterle eventualmente inserirle nel proprio CLASSPATH. Questo è un
esempio di output:
</p>

<pre caption="Elencare le classi">
# <i>java-config --list-available-packages</i>
[xerces-2] The next generation of high performance, fully compliant XML parsers in the Apache Xerces family (/usr/share/xerces-2/package.env)
[junit] Simple framework to write repeatable tests (/usr/share/junit/package.env)
[bsh] BeanShell: A small embeddable Java source interpreter (/usr/share/bsh/package.env)
[bcel] The Byte Code Engineering Library: analyze, create, manipulate Java class files (/usr/share/bcel/package.env)
[log4j] A low-overhead robust logging package for Java (/usr/share/log4j/package.env)
...
</pre>

<p>
Anche qui, i nomi tra parentesi (<e>[]</e>) sono gli identificatori da passare a
<c>java-config --set-system-classpath</c>. Questo è un esempio:
</p>

<pre caption="Impostare i classpath">
# <i>java-config --set-system-classpath log4j,xerces-2</i>
</pre>

<note>
La directory corrente (<path>.</path>) non farà parte del classpath di sistema,
in quanto è inserita nel profilo di login del sistema.
</note>

<p>
A questo punto bisogna aggiornare le variabili d'ambiente effettuando un nuovo
login, oppure derivare <path>/etc/profile</path>.
</p>

<p>
Per l'utente normale, <c>java-config --set-user-classpath</c> creerà
<path>~/.gentoo/java-env-classpath</path>, il quale dovrà essere ereditato dal
proprio profilo di shell.

</p>

<pre caption="Ereditare lo specifico classpath per utente">
<i>if [[ -f "${HOME}/.gentoo/java-env-classpath" ]]; then
       source ${HOME}/.gentoo/java-env-classpath
fi</i>
</pre>

<p>
Se si vuole veramente una Classpath predefinita per l'utente o di sistema, si
può aggiungere nel proprio profilo qualcosa come mostrato nell'esempio seguente.
Questa procedura non è comunque consigliata.
</p>

<pre caption="Impostare il classpath">
# <i>export CLASSPATH="${CLASSPATH}:$(java-config --classpath log4j,xerces-2)"</i>
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Plugin Java per Browser</title>
<section>
<title>Installare un plugin</title>
<body>

<p>
È possibile installare un plugin Java per il proprio Browser, effettuando
l'emerge della VM Java con la flag USE <c>nsplugin</c> abilitata.
</p>

<note>
<c>nsplugin</c> non è disponibile per tutte le architetture. Per verificare la
disponibilità di tale plugin sulla propria architettura, eseguire <c>emerge -pv
&lt;java-vm&gt;</c> prima di installare la VM.
</note>

<p>
Portage consente di installare più versioni dei plugin Java, sebbene il proprio
browser possa utilizzarne solo uno. Si può controllare la lista dei plugin
disponibili eseguendo:
</p>

<pre caption="Vedere i plugin disponibili">
# <i>eselect java-nsplugin list</i>
   [1]   sun-jre-bin-1.6
   [2]   icedtea-bin
</pre>

<p>
In questo esempio, <c>sun-jre-bin</c> è selezionato come plugin per il browser.
</p>

<pre caption="Selezionare un plugin">
# <i>eselect java-nsplugin set sun-jre-bin-1.6</i>
</pre>

<p>
Verificare il plugin corretto:
</p>

<pre caption="Verifica selezione del plugin corretto">
# <i>eselect java-nsplugin list</i>
   [1]   sun-jre-bin-1.6  current
   [2]   icedtea-bin
</pre>

<p>
Java.com inoltre fornisce un collegamento per <uri
link="http://java.com/en/download/installed.jsp">verificare i plugin
installati</uri>. In aggiunta, se viene utilizzato un browser basato su Mozilla,
è possibile verificare il proprio plugin Java digitando <c>about:plugins</c>
nella barra degli indirizzi del browser.
</p>

</body>
</section>
<section>
<title>Plugin su sistemi multilib</title>
<body>

<p>
Se si sta utilizzando un sistema con librerie sia a 64-bit che 32-bit (per
esempio, su AMD64), è possibile utilizzare sia i plugin Java a 64-bit che a
32-bit. A meno che non si abbia un'esigenza precisa di eseguire applicazioni
Java a 32-bit, è consigliabile usare i plugin nativi a 64-bit sui browser a
64-bit.
</p>

<p>
Sono disponibili diversi plugin per i browser nativi a 64-bit. L'accoppiata
predefinita JDE/JRE, <c>sun-jdk</c> and <c>sun-jre-bin</c>, includono i plugin
per i browser. Basta effettuare l'emerge di uno dei due pacchetti con la flag
USE <c>nsplugin</c> abilitata.
</p>

<p>
Per usare un plugin a 32-bit su un browser a 32-bit, bisogna installare
<c>emul-linux-x86-java</c> con la flag USE <c>nsplugin</c> attiva.
</p>

<pre caption="Installare un plugin a 32-bit">
# <i>echo "app-emulation/emul-linux-x86-java nsplugin" >> /etc/portage/package.use</i>
# <i>emerge emul-linux-x86-java</i>
</pre>

<p>
Poi verificare quali plugin sono disponibili:
</p>

<pre caption="Vedere i plugin disponibili">
# <i>eselect java-nsplugin list</i>
Available 32-bit Java browser plugins
  [1]   emul-linux-x86-java-1.5
  [2]   emul-linux-x86-java-1.6
Available 64-bit Java browser plugins
  [1]   icedtea-bin
  [2]   sun-jre-bin-1.6
</pre>

<p>
A questo punto selezionare il plugin a 32-bit per il proprio browser:
</p>

<pre caption="Selezionare il plugins">
<comment>(Selezionare i plugin per i broswer a 32-bit e 64-bit)</comment>
# <i>eselect java-nsplugin set 32bit emul-linux-x86-java-1.6</i>
# <i>eselect java-nsplugin set 64bit sun-jre-bin-1.6</i>
</pre>

<p>
Verificare di aver selezionato il plugin corretto:
</p>

<pre caption="Verificare il plugin corretto">
# <i>eselect java-nsplugin list</i>
Available 32-bit Java browser plugins
  [1]   emul-linux-x86-java-1.5
  [2]   emul-linux-x86-java-1.6  current
Available 64-bit Java browser plugins
  [1]   icedtea-bin
  [2]   sun-jre-bin-1.6  current
</pre>

</body>
</section>
</chapter>

<chapter>
<title>Flag USE da utilizzare con Java</title>
<section>
<title>Impostare le flag USE</title>
<body>

<p>
Per maggiori informazioni riguardo l'utilizzo delle flag USE, fare riferimento
al capitolo <uri link="/doc/it/handbook/handbook-x86.xml?part=2&amp;chap=2">Flag
USE</uri> del Manuale Gentoo.
</p>

</body>
</section>
<section>
<title>Le flag</title>
<body>

<ul>
  <li>La flag <b>java</b> aggiunge il supporto a Java in vari programmi</li>
  <li>
    La flag <b>nsplugin</b> aggiunge il supporto per i browser come Mozilla
    (incluso Firefox). Questa flag è necessaria per visualizzare le applet java
    nel proprio browser.
  </li>
  <li>
    La flag <b>source</b> installa un archivio in formato zip del codice
    sorgente di un pacchetto. Questa modalità è usata tradizionalmente per gli
    IDE per 'fissare" il sorgente alle librerie che si stanno usando.
  </li>
  <li>
    La flag <b>jce</b> aggiunge il supporto al "Java Cryptography Engine"
    (Motore di Crittografia Java)
  </li>
  <li>
    Per i pacchetti Java, la flag <b>doc</b> compilerà la documentazione delle
   API usando javadoc.
  </li>
</ul>

</body>
</section>
</chapter>

<chapter>
<title>Risorse aggiuntive</title>
<section>
<title>Risorse off-line</title>
<body>

<ul>
  <li>java-config man page</li>
  <li><c>java-config --help</c></li>
</ul>

</body>
</section>
<section>
<title>Risorse Online</title>
<body>

<ul>
  <li>
    La <uri link="http://www.gentoo.org/proj/en/java/">Pagina del Progetto Java
    </uri>
  </li>
  <li>
    Gli archivi delle mailing list <uri
    link="http://news.gmane.org/gmane.linux.gentoo.java">gentoo-java</uri>, <uri
    link="http://news.gmane.org/gmane.linux.gentoo.user">gentoo-user</uri>, e
    <uri link="http://news.gmane.org/gmane.linux.gentoo.devel">gentoo-dev</uri>
  </li>
  <li>
    <uri link="irc://irc.gentoo.org/gentoo">#gentoo</uri> e <uri
    link="irc://irc.gentoo.org/gentoo-java">#gentoo-java</uri> su
    irc.freenode.net
  </li>
  <li>
    <uri link="http://en.wikipedia.org/wiki/Java_programming_language">La pagina
    dedicata a Java su Wikipedia</uri>
  </li>
  <li>
    Per qualsiasi suggerimento o domanda riguardante questo documento, si prega
    di inviare un'e-mail al team Java di Gentoo: <mail>java@gentoo.org</mail>
  </li>
</ul>

</body>
</section>
</chapter>
</guide>
