Late as usual!

mercoledì, maggio 04, 2005

Ok, ci abbiamo provato...

...ad installare Java 1.5 o J2SE 5.0 o Tiger o comestrac@#% lo vogliamo chiamare su Mac OS X Panther (10.3.9) anche se Apple era stata molto chiara a riguardo: Tiger va solo su Tiger.

Epperò visto che a qualcuno era andata bene al giro passato e l'installazione di Java 1.4 su Jaguar (10.2.x) era riuscita nonostante non fosse ufficialmente supportata, ho pensato bene di seguire il vecchio esempio secondo quanto riportato su ResExcellence, adattandolo alle nuove esigenze.

Quello che segue è la cronaca di un insuccesso.

Step 1. Scarico il file DMG dell'installazione Java15Release1.dmg e monto l'immagine disco.
Step 2. Copio il file PKG Java15Release1.pkg sulla Scrivania in modo da poterlo modificare.
Step 3. Dal menu contestuale apro il contenuto del pacchetto e cerco il file VolumeCheck, lo apro con un editor come vi e modifico opportunamente il controllo sulla versione dell'OS:

# If system version is less than than 10.4 show error
if (CheckVersion("$SYSTEM_VERS", "10.4", "ProductVersion", "<" )) {


Step 4.
Aggiungo un symlink da Terminale per correggere una differenza nel percorso per Java 1.4 che l'Installer si aspetta con i seguenti comandi:

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo ln -s 1.4.2 1.4


Step 5. Lancio l'installer, tutto sembrerebbe andar bene, incrociamo le dita...
Step 6. Provo a lanciare Java 1.5 da:
/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Commands/java
Niente da fare, ottengo il messaggio già visto con gli errori nell'aggiornamento 10.3.9 di Panther:
HotSpot not at correct virtual address. Sharing disabled.
Provo la stessa risoluzione, aggiornamento prebinding + rigenerazione Java Shared Archive:

sudo update_prebinding -root / -force
sudo /System/Library/Frameworks/JavaVM.framework/Versions/1.5/Commands/update_sharing 1.5

Drammatico Epilogo Rilancio Java, tutto uguale a prima, guardo il resoconto della Console e ahimè trovo un messaggio che non lascia scampo, Java 1.5 utilizza API non esistenti su Panther:

dyld: java Undefined symbols:
/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libawt.jnilib undefined reference to _kCTForegroundColorFromContextAttributeName expected to be defined in ApplicationServices
/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libawt.jnilib undefined reference to _NSAccessibilityTopLevelUIElementAttribute expected to be defined in Cocoa
/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries/libawt.jnilib undefined reference to _NSAccessibilityInsertionPointLineNumberAttribute expected to be defined in Cocoa

Faccio un ultimo tentativo a lanciare java 1.5 con il parametro che mi permette di ignorare il java shared archive:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.5/Home
alias java='$JAVA_HOME/bin/java -Xshare:off'
java


Effettivamente qui il messaggio di errore è sparito, mi perdo l'ottimizzazione dello sharing, ma forse qualcosa funziona... passo allora alla prova di qualche applicazione, NetBeans, Eclipse, jEdit o qualcos'altro senza interfaccia grafica come Ant, Tomcat... insomma le prime non funzionano, le seconde invece sembrerebbe di si, Contrordine, Eclipse va! A a naso tutto quello che usa java.swing sembrerebbe da evitare, il che ha anche una logica perché nella JVM Apple Swing dovrebbe essere basata su Cocoa. É forse giunto il momento di lanciarsi su SWT? Filippo ne sarebbe contento ;)

Ma vale la pena tutta questa fatica? Forse si, forse no.
In realtà il problema è un altro: Java su Mac sarà anche una delle migliori implementazioni disponibili, ma rimane comunque soggetta ai diktat di Apple, cosa che per gli sviluppatori può diventare un serio problema. Il ritardo nell'implementazione della versione 1.5 da parte di Apple è un fatto, ma ora che con J2SE 6.0 Mustang, la prossima versione di Java, il processo di release di Java sta diventando sempre più aperto da parte di Sun, diventa sempre più rilevante per chi sviluppa poter utilizzare anche le daily build pubblicate su java.net, cosa che su Mac sembrerebbe assolutamente non fattibile. Speriamo in meglio, visto che anche James Gosling ha il suo bravo PowerBook...

Risultato finale.
Mentre mi arrovello in questi pensieri, per ora vado a comprarmi Tiger, anche se delle 200+ feature di Panther tante ne devo ancora scoprire ed invece ora mi tocca aggiungerne altre 200+ alla lista...

2 commenti:

Anonimo ha detto...

Continua a sfuggirmi l'utilita' della scelta di Apple di volersi tener stretto l'onero dello sviluppo di Java, nonostante i risultati in termini di prestazioni siano sconfortanti (da macuser di lunga data, vado in depressione quando il mio powerbook G4 viene messo sotto da un ridicolo PIII/800).
Almeno la rendessero open source...

Sperem. :-)

Riccardo Albieri

magomarcelo ha detto...

probabilmente � legata alla necessit� di supportare meglio WebObjects, in ogni caso ho paura che la lentezza sia pi� causata dalla GUI di Mac OS X che dalla JVM in s�