Installare il JDK su una macchina Windows senza privilegi di amministratore

Nel post di oggi vediamo come installare il Java Development Kit (JDK) su una macchina windows sulla quale non si hanno i permessi di amministratore. Senza tali diritti, infatti, non è possibile installare direttmante il jdk tramite il wizard guidato ma occorre farlo manualmente.
Ma andiamo con ordine e, dopo aver scaricato la corretta versione del jdk per il nostro sistema operativo, proviamo ad eseguire l’installazione, facendo doppio click sull’icona. Nel mio caso il sistema operativo è Windows 7 a 64bit e la versione del jdk è jdk-7u67-windows-x64. Provando a lanciare l’installazione otteniamo il seguente errore, che ci indica appunto che non abbiamo i privilegi sufficienti per eseguire l’installazione e che per farlo dobbiamo loggarci come amministratori.

Immagine1

Immagine2

Siccome come amministratori non ci possiamo loggare, dobbiamo trovare una soluzione alternativa.
Apriamo quindi il file di installazione del jdk, jdk-7u67-windows-x64.exe, con 7zip e diamo un’occhiata al suo contenuto. Come possiamo vedere nella figura seguente, all’interno dell’eseguibile è presente un file zip chiamato tools.zip.

Immagine3

Entrando ulteriormente all’interno di questo file zip vediamo il suo contenuto, illustrato in figura:

Immagine4

Estraiamo a questo punto tutto il contenuto in una cartella sul file system, sotto l’area del nostro utente. Ad esempio: C:\Users\MolinariD\jdk-7u67

Navigando tra il contenuto estratto dallo zip e copiato nella cartella, troveremo alcuni files con estensione .pack, precisamente sotto le cartelle lib e jre/lib. Nella figura seguente viene illustrato il contenuto della cartella /jre/lib in cui possiamo vedere alcuni di questi files .pack

Immagine5

Questi file non sono altro che dei .jar ulteriormente compressi con un tool chiamato pack200 fornito direttamente con il jdk. Quello che dobbiamo fare noi è scompattare questi file .pack nei relativi file .jar tramite il comando opposto, ovvero unpack200. Per ulteriori dettagli si puà vedere la documentazione ufficiale di pack200 e unpack200.

Andiamo quindi nella cartella /lib del jdk ed eseguiamo un dir per ottenere l’elenco dei file .pack presenti. Vediamo che è presente un file chiamato tools.pack, per cui eseguiamo il seguente comando: unpack200 tools.pack tools.jar

Immagine10

La stessa operazione appena eseguita sul file tools.pack dobbiamo eseguirla per tutti i file .pack contenuti nella cartella jre/lib. Per fare questo però non ripetiamo manualmente il comando unpack per ciascuno di essi, ma scriviamo invece un piccolo script DOS che lo faccia per noi (siccome nel mio caso andava installato su più macchine).

Quello che deve fare il nostro script è:

1) richiedere all’utente il path della cartella contenente il jdk
2) cercare tutti i file .pack presenti nelle sottodirectories
3) eseguire il comando unpack200 su tutti questi files

Per il punto 1) utilizziamo il comando SET con l’opzione /P che ci permette di valorizzare una variabile tramite un valore inserito in input dall’utente, mostrando anche un messaggio al prompt.

Per il punto 2) utilizziamo il comando FORFILES che ci permette di selezionare un insieme di files e di eseguire un determinato comando su di essi. FORFILES offre le seguenti opzioni che andremo ad utilizzare:

/P indica il path da cui far partire la ricerca
/S indica di effettuare la ricerca in modo ricorsivo anche sulle sottodirectories
/M permette di definire una maschera di ricerca, ovvero di filtrare i files a seconda di un determinato pattern
/C indica il comando da eseguire sui files, che deve essere racchiuso tra doppi apici ”

Per il punto 3) invochiamo semplicemente il comando unpack200 fornendo come parametri il nome del file .pack ed il suo equivalente con la sostituzione dell’estensione in .jar, che otteniamo con un’istruzione di replace (outputName=%outputName:pack=jar%)

Ecco come sarà il nostro script:

@echo off
REM Author:  Molinari Davis - www.davismol.net
REM Version: 0.1
REM Date:    29/08/2014

if "%1"=="/processFile" goto processFile
SET /P commandPath=Inserisci il path della jdk: 
SET commandName=\jre\bin\unpack200.exe
FORFILES /p %commandPath% /s /m *.pack /c "cmd /c call "%~f0" /processFile @path"
goto :EOF
:processFile
SET outputName=%2
SET outputName=%outputName:pack=jar%
SET fullCommand=%commandPath%%commandName% %2 %outputName%
REM echo %fullCommand%
%fullCommand%
if %ERRORLEVEL% GEQ 1 (
	echo ERRORE nell'estrazione del file: %outputName%
) else (
	echo Estratto file: %outputName%
)

Ora che abbiamo creato lo script non ci resta che eseguirlo.
Una volta lanciato, come previsto, ci viene chiesto di indicare il path in cui si trova la cartella del jdk:

Immagine6

In questo caso avevo scompattato la cartella al path C:\Users\MolinariD\jdk-7u67 per cui inserisco questo percorso come input dello script:

Immagine7

A questo punto lo script procede nella ricerca di tutti i files .pack presenti nelle sottocartelle ed estrae per ciascuno di essi il relativo file .jar.
Il risultato dell’esecuzione dello script è mostrato nella figura seguente:
Immagine8

Come ultimo passo andiamo a verificare l’effettiva presenza dei file .jar che ci aspettiamo. Guardando ad esempio nella cartella jre/lib vediamo che, per ogni file .pack c’è il suo corrispondente file .jar.

Immagine9
Quindi il nostro script ha funzionato e abbiamo un jdk installato e pronto all’uso.

Lo script creato è disponibile per il download QUI:

Leave a Reply

Your email address will not be published. Required fields are marked *